jjo*_*ahu 3 java foreach java-8 java-stream
一些列表在这里
List<Book> list = new ArrayList<>();
{
list.add(new Book("Core Java", 200));
list.add(new Book("Core Java", 500));
list.add(new Book("Core Java", 800));
list.add(new Book("Learning Freemarker", 150));
list.add(new Book("Learning Freemarker", 1350));
list.add(new Book("Learning Freemarker", 1250));
list.add(new Book("Spring MVC", 300));
list.add(new Book("Spring MVC", 600));
list.add(new Book("Spring MVC", 1600));
}
Run Code Online (Sandbox Code Playgroud)
我想显示这样的书单
Core Java", 800
Learning Freemarker", 1350
Spring MVC", 1600
Run Code Online (Sandbox Code Playgroud)
每1个元素
list .stream().distinct()
.sorted(Comparator.comparing(Book::bookname)
.thenComparing(Book::getPrice)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
此代码仅排序。
首先,您可以按Book名称进行分组并将它们收集到Map<String, List<Book>>,然后map.values()从每种类型中收集最高价格的书
List<Book> books = list.stream()
.collect(Collectors.groupingBy(Book::getName))
.values()
.stream()
.map(book -> Collections.max(book, Comparator.comparingInt(Book::getCost)))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
Collectors.toMap与收集和查找最大元素相比,@Holger 使用的另一种解决方案将更有效
List<Book> books = list.stream()
.collect(Collectors.collectingAndThen(
Collectors.toMap(Book::getName, Function.identity(),
BinaryOperator.maxBy(Comparator.comparingInt(Book::getCost))),
m -> new ArrayList<>(m.values())));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |