gpt4 book ai didi

java - 如何使用 java 8 将一组对象分组到排序列表中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:53 24 4
gpt4 key购买 nike

我想获取一组对象(在本例中为 ObjectInstance),我想按一个属性对它们进行分组,然后根据另一个属性对生成的列表进行排序。

Set<ObjectInstance> beans = server.queryMBeans(null, null);
Map<String, List<String>> beansByDomain = beans.stream()
.collect(groupingBy( (ObjectInstance oi) -> oi.getObjectName().getDomain(),
mapping((ObjectInstance oi) -> oi.getObjectName().getCanonicalKeyPropertyListString(),
toList() )));

上面的表达式创建了正确的数据结构:Map,其中键是 ObjectInstance 对象的域,值是属性列表的列表。我现在想要的是对列表进行排序,以确保它们按字母顺序排列。有什么方法可以在同一个表达式中做到这一点吗?

一个想法是在 .stream() 之后添加 .sort(),但这真的能保证有效吗?

最佳答案

使用collectingAndThen :

List<String> beansByDomain = beans.stream()
.collect(groupingBy( (ObjectInstance oi) -> oi.getObjectName().getDomain(),
mapping((ObjectInstance oi) -> oi.getObjectName().getCanonicalKeyPropertyListString(),
collectingAndThen(toList(), (l -> l.stream().sorted().collect(toList()))) )));

您可以提取 Collector 以使代码更具可读性:

public static <T> Collector<T,?,List<T>> toSortedList() {
return Collectors.collectingAndThen(Collectors.toList(),
l -> l.stream().sorted().collect(toList()));
}

List<String> beansByDomain = beans.stream()
.collect(groupingBy( (ObjectInstance oi) -> oi.getObjectName().getDomain(),
mapping((ObjectInstance oi) -> oi.getObjectName().getCanonicalKeyPropertyListString(),
toSortedList())));

关于java - 如何使用 java 8 将一组对象分组到排序列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32171283/

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