gpt4 book ai didi

java 8流收集最大对象并按属性区分

转载 作者:行者123 更新时间:2023-12-04 17:22:05 25 4
gpt4 key购买 nike

这里有一些列表

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

每一个元素

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 -> Collections.max(book, Comparator.comparingInt(Book::getCost)))
.collect(Collectors.toList());

@Holger 使用 Collectors.toMap 建议的其他解决方案与收集和查找最大元素相比会更有效

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())));

关于java 8流收集最大对象并按属性区分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60098254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com