gpt4 book ai didi

Java 流将对象列表收集到存储桶

转载 作者:行者123 更新时间:2023-12-04 22:10:56 24 4
gpt4 key购买 nike

我在将一些列表值收集到存储桶时遇到问题。例如,假设我有一个字符串列表:

List<String> strs = Arrays.asList("ABC", "abc", "bca", "BCa", "AbC");

我想将字符串放入只包含大小写不同的字符串的集合(或列表)中,即例如上面的它将是两个集合的集合: [["ABC", "abc", "AbC"], ["bca", "BCa"]]
所以请帮助我为这个问题编写收集器。
List<Set<String>> result = strs.stream()
.collect(/* some collectors magic here */)

最佳答案

您正在寻找的“一些 Collection 家魔术”可以分两步完成:

  • 首先,您需要按您要查找的属性对元素进行分组。在这种情况下,由于您想忽略大小写,String#toLowerCase 会完成这项工作(不要忘记将 Locale 作为参数的重载方法)。您还希望分组的值是唯一的,以便您可以使用 groupingBy 的重载版本将它们放入 Set (默认实现使用 List )
  • 因为您对键不感兴趣,只需使用 collectingAndThen 收集器从结果映射中获取值并将它们放入列表(如果您确实需要列表)中。

  • import static java.util.stream.Collectors.collectingAndThen;
    import static java.util.stream.Collectors.groupingBy;
    import static java.util.stream.Collectors.toSet;

    ...

    List<Set<String>> result =
    strs.stream()
    .collect(collectingAndThen(groupingBy(String::toLowerCase, toSet()),
    m -> new ArrayList<>(m.values())));

    关于Java 流将对象列表收集到存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35022976/

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