java - 使用 Stream API 创建 Map<String, List<Object>> ,其中对列表的元素进行排序

标签 java java-8 functional-programming java-stream

我有任何ArrayList “监控”对象。每个对象都有两个字段,“brand::String”和“price::BigDecimal”。我正在使用以下 Stream,将 Monitor 对象分类为 HashMap<String, List<Monitor>> , 其中key是名称(因此具有相同名称的监视器最终出现在相同的列表中:

Map<String, List<Monitor>> monitorsByNameMap =
    monitors.stream()
        .collect(Collectors.groupingBy(Monitor::getName));

我想要每一个 List<Monitor>HashMap根据 price 排序每个 Monitor object - 最好按升序排列。我想知道是否可以通过添加到上面的表达式来实现。

最佳答案

name分组后可以使用collectingAndThen

Map<String, List<Monitor>> monitorsByNameMap = monitors.stream()
                  .collect(Collectors.groupingBy(Monitor::getName,
                        Collectors.collectingAndThen(Collectors.toList(),
                              l -> l.stream()
                                       .sorted(Comparator.comparing(Monitor::getPrice))
                                       .collect(Collectors.toList())
                            ))
                    );

关于java - 使用 Stream API 创建 Map<String, List<Object>> ,其中对列表的元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61806918/

相关文章:

java-8 - OSGI - Java 8 -> 9 迁移(需求能力问题)

java - 如何使用 Java 8 流迭代引用父元素的嵌套循环?

Java 收集器类的使用

c++ - 理解和使用 Boost Phoenix 库,重点放在惰性求值上

javascript - 如何在功能组件 [React] 中设置 displayName

Java HashMap 迭代 Map.Entry<> 与 Entry<>

java.nio.file.Paths - 如何在迭代时跳过无法访问的文件/文件夹

haskell - 如何使用函数式响应式(Reactive)编程在每个时间步查询 URL?

java - 同步 textArea.clear() 后跟 textArea.setText() 不会清除文本

java - 如何在docker中启动一个fat jar?