gpt4 book ai didi

java - 从 lambda 表达式排序和子列表

转载 作者:太空狗 更新时间:2023-10-29 22:50:49 27 4
gpt4 key购买 nike

我有一个包含以下元素的数组列表:

List<Record> list = new ArrayList<>();
list.add(new Record(3, "32"));
list.add(new Record(4, "42"));
list.add(new Record(1, "12"));
list.add(new Record(1, "11"));
list.add(new Record(2, "22"));
list.add(new Record(5, "52"));
list.add(new Record(5, "53"));
list.add(new Record(5, "51"));

Record 是一个简单的 POJO,有 id 和 name

我想按照 list 做这些。

  • 创建类似 Map<Integer, List<Record>> 的 map 有一个键是 id 和 slimier 键添加为列表。我已经按照下面的方式完成了。

    Map<Integer, List<Record>> map = list.stream()
    .collect(Collectors.groupingBy(Record::getId, HashMap::new, Collectors.toList()));
  • 现在我想按名称和子列表对列表进行排序以提供 map 内的限制

    map.forEach((k, v) -> v.stream().sorted(Comparator.comparing(Record::getName)));    
    map.forEach((k, v) -> map.put(k, v.subList(0, Math.min(**limit**, v.size()))));

我试过上面的方法,看起来这不是一个好方法。谁能提出更好的方法?

最佳答案

您可以使用 Java 8 Collectors.collectingAndThen()方法:

Map<Integer, List<Record>> map = list.stream()
.collect(Collectors.groupingBy(
Record::getId,
Collectors.collectingAndThen(
Collectors.toList(),
records -> records.stream()
.sorted(Comparator.comparing(Record::getName))
.limit(limit)
.collect(Collectors.toList()))));

关于java - 从 lambda 表达式排序和子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48828142/

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