An extension of the java.util.List interface which include some of the C# LINQ useful functions.
List classes are extended as well. (ArrayList -> BetterArrayList)
Current version v1.4
Before BetterLists :
ArrayList<Contact> contacts = someFunction();
ArrayList<String> contactsEmails = new ArrayList<>();
for(int i = 5; i < contacts.size(); i++){
if(c.getEmail() != null){
contactsEmails.add(c.getEmail());
}
}
With BetterLists :
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
BetterList<String> contactsEmails = contacts.skip(5)
.where(c -> c.getEmail() != null)
.<String>select(c -> c.getEmail());
NOTE : Please note that, unlike C# LINQ, these functions are not optimized at low levels and will have the same impact as standard loops in your program.
You can use this project as a maven dependency with this :
<dependency>
<groupId>com.github.klemek</groupId>
<artifactId>betterlists</artifactId>
<version>1.4</version>
</dependency>
Name | Description |
---|---|
all | Determines whether all elements of the sequence satisfy a condition. |
any | Determines whether any element of the sequence satisfies a condition. |
count | Returns a number that represents how many elements in the specified sequence satisfy a condition. |
exclusion | Produces the set exclusion of two sequences. |
first / firstOrDefault | Returns the first element in the sequence that satisfies a specified condition. (Returns an error if no elements match the condition unless you use the firstOrDefault function) |
last / lastOrDefault | Returns the last element in the sequence that satisfies a specified condition. (Returns an error if no elements match the condition unless you use the lastOrDefault function) |
max | Invokes a transform function on each element of the sequence and returns the maximum nullable Double value. |
mean | Computes the mean of the sequence of Double values that are obtained by invoking a transform function on each element of the input sequence. |
min | Invokes a transform function on each element of the sequence and returns the minimum nullable Double value. |
orderBy / orderByDescending | Sorts the elements of a sequence in ascending order by using a specified comparator. (You can user orderByDescending to change the order) |
reverse | Inverts the order of the elements in the sequence. |
select | Projects each element of a sequence into a new form. |
selectMany / selectManyArrays | Projects each element of a sequence into a new list and flattens the resulting sequences into one sequence. |
skip / skipWhile | Bypasses elements in the sequence as long as a specified condition is true and then returns the remaining elements. |
sum | Computes the sum of the sequence of Double values that are obtained by invoking a transform function on each element of the input sequence. |
take / takeWhile | Returns a specified number of contiguous elements from the start of the sequence. |
union | Produces the set union of two sequences. |
where | Filters a sequence of values based on a predicate. |
Determines whether all elements of the sequence satisfy a condition.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
boolean allAdults = contacts.all(c -> c.getAge() >= 21);
Determines whether any element of the sequence satisfies a condition.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
boolean someUnderage = contacts.any(c -> c.getAge() < 21);
Returns a number that represents how many elements in the specified sequence satisfy a condition.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
int adultsCount = contacts.count(c -> c.getAge() >= 21);
Produces the set exclusion of two sequences.
BetterArrayList<Contact> frenchContacts = BetterArrayList.fromList(someFunction());
ArrayList<Contact> validContacts = someOtherFunction();
BetterList<Contact> invalidFrenchContacts = frenchContacts.exclusion(validContacts);
Returns the first element in the sequence that satisfies a specified condition. (Throws an error if no elements match the condition unless you use the firstOrDefault
function)
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
Contact firstManager = contacts.first(c -> c.isManager()); //can throw NoSuchElementException
Contact firstContact = contacts.firstOrDefault(null); //return null if the list is empty
Returns the last element in the sequence that satisfies a specified condition. (Throws an error if no elements match the condition unless you use the lastOrDefault
function)
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
Contact lastRegular = contacts.last(c -> !c.isManager()); //can throw NoSuchElementException
Contact lastManager = contacts.lastOrDefault(c -> c.isManager(), null); //return null there is no manager
Invokes a transform function on each element of the sequence and returns the maximum nullable Double value.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
int maxAge = (int)contacts.max(c -> (double)c.getAge());
Computes the mean of the sequence of Double values that are obtained by invoking a transform function on each element of the input sequence.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
int meanAge = (int)contacts.mean(c -> (double)c.getAge());
Invokes a transform function on each element of the sequence and returns the minimum nullable Double value.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
int minAge = (int)contacts.min(c -> (double)c.getAge());
Sorts the elements of a sequence in ascending order by using a specified comparer. (You can user orderByDescending
to change the order)
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
BetterList<Contact> orderedContacts = contacts.orderBy(c -> c.getName);
BetterList<Contact> orderedContacts2 = contacts.orderByDescending(c -> c.getAge()); //oldest first
Inverts the order of the elements in the sequence.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
BetterList<Contact> reversedContacts = contacts.reverse();
Projects each element of a sequence into a new form.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
BetterList<String> contactsMails = contacts.select(c -> c.getEmail());
Projects each element of a sequence into a new list and flattens the resulting sequences into one sequence.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
BetterList<String> contactsNumbers = contacts.selectMany(c -> c.getAllPhoneNumbers());
BetterList<String> contactsMails = contacts.selectManyArrays(c -> c.getEmail().split(";"));
Bypasses elements in the sequence as long as a specified condition is true and then returns the remaining elements.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
BetterList<Contact> contacts2 = contacts.skip(3);
BetterList<Contact> contacts3 = contacts.skipWhile(c -> c.getEmail().startsWith("society"));
Computes the sum of the sequence of Double values that are obtained by invoking a transform function on each element of the input sequence.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
double salary = contacts.skip(c -> c.getSalary());
Returns a specified number of contiguous elements from the start of the sequence.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
BetterList<Contact> contacts2 = contacts.take(5);
BetterList<Contact> contacts3 = contacts.takeWhile(c -> c.getEmail().startsWith("society"));
Produces the set union of two sequences.
BetterArrayList<Contact> frenchContacts = BetterArrayList.fromList(someFunction());
ArrayList<Contact> validContacts = someOtherFunction();
BetterList<Contact> validFrenchContacts = frenchContacts.union(validContacts);
Filters a sequence of values based on a predicate.
BetterArrayList<Contact> contacts = BetterArrayList.fromList(someFunction());
BetterList<Contact> validContacts = contacts.where(c -> c.getEmail() != null);