Java's Linq (C#) Equivalent
Given the following collection:
C#
IEnumerable<string> names = new List<string>(new[] { "Alice", "Bob" });
Java
List<String> names = Arrays.asList("Alice", "Bob");
Filter using .Where()
C#
IEnumerable<string> namesStartingWithA = names.Where(name => name.StartsWith("A"));
Java
Stream<String> namesStartWithA = names.stream().filter(name -> name.startsWith("A"));
Mapping/Transformation of items .Select()
C#
IEnumerable<string> namesUppercase = names.Select(name => name.ToUpperInvariant());
Java
Stream<String> namesUppercase = names.stream().map(name -> name.toUpperCase());
Perform ction for each of element .ForEach()
C# (none for IEnumerable<T>
). It was said that ListForEach(action)
implementation has been dropped to avoid issue.
Java
names.forEach(name -> System.out.println(name));
Ordering
C#
IEnumerable<string> namesOrdered = names.OrderBy(name => name);
Java
Stream<String> namesOrdered = names.stream().sorted((String name1, String name2) -> {
return name1.compareTo(name2);
});
Grouping
C#
Dictionary<int, List<string>> namesByLength = names
.GroupBy(name => name.Length)
.ToDictionary(g => g.Key, g => g.ToList());
Java (not for the faint-hearted)
Map<Integer, List<String>> map = names.stream()
.collect(Collectors.groupingBy(
n -> n.length(),
Collectors.mapping(String::toString, Collectors.toList())));
References: