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

3 java functional-programming java-8 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));
Run Code Online (Sandbox Code Playgroud)

我想每个List<Monitor>HashMap要排序基于所述price每一个Monitor对象-优选在按升序排列。我想知道是否可以通过添加上述表达式来实现。

Had*_*i J 6

您可以collectingAndThen在分组后使用name

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())
                            ))
                    );
Run Code Online (Sandbox Code Playgroud)