java 8流收集最大对象,并按属性区分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 8流收集最大对象,并按属性区分相关的知识,希望对你有一定的参考价值。
某些列表在这里
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));
}
我要显示这样的图书清单
Core Java", 800
Learning Freemarker", 1350
Spring MVC", 1600
每个1个元素
list .stream().distinct()
.sorted(Comparator.comparing(Book::bookname)
.thenComparing(Book::getPrice)).collect(Collectors.toList());
此代码仅排序。
答案
首先您可以对Book
名称进行分组,然后将它们收集到Map<String, List<Book>>
中,然后从map.values()
中收集每种类型的最高价格书
List<Book> books = list.stream()
.collect(Collectors.groupingBy(Book::getName))
.values()
.stream()
.map(book -> book.stream().max(Comparator.comparingInt(Book::getCost)))
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
以上是关于java 8流收集最大对象,并按属性区分的主要内容,如果未能解决你的问题,请参考以下文章