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

伊利亚

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

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 */)
亚历克西斯C.

您正在寻找的“收藏家的魔力”可以通过两个步骤完成:

  • 首先,您需要按要查找的属性对元素进行分组。在这种情况下,由于您要忽略大小写,因此可以String#toLowerCase执行此工作(不要忘记以Localeas为参数的重载方法)。您还希望分组的值是唯一的,因此您可以使用重载版本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())));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将对象流收集到 Map 中

将对象列表中的值收集到swift5中的字典中

如何使用Java流将多个列表收集到一个列表中?

Java流将数组收集到一个列表中

Java流基于列的总和将Excel CSV收集到列表过滤

Java流:发行约收集到地图<字符串,对象>

使用Java 8流将子对象收集到parentObjectId的哈希图

使用流从地图和值,并收集到列表

如何将流收集到列表?

收集到使用Java 8流番石榴的ListMultiMap

外循环流,但收集到内循环对象列表

根据值将数组收集到子数组存储桶中(数组本身就是)

如何收集到地图中值形成一个列表时重复键在流,在Java 8

如何在Java 8中将流的结果收集到自定义对象的数组中

Java的8过滤+收集到列表中的NullPointerException

Java 8流收集器-用于使用多个存储桶中的对象创建映射的收集器

使用流收集到地图

Java 8流中间映射/收集到具有2个值的流

处理列表流并仅使用非空值收集到map / ImmutableMap中

收集到向量而不是列表

Unity:计算收集到的对象

Java8:按键将流收集到SortedMap中

使用Java 8流收集到增值基于现有的键/值对的

如何将Java 8流收集到Guava ImmutableCollection中?

在Java 8中使用Lambda将流收集到HashMap中

将Java-8流收集到Guava ImmutableList的最佳方法

如何在 Java 中使用流/lambda 重复调用 0 参数函数并将返回值收集到列表中?

将可迭代对象收集到一个变量中(列表)

Java Stream:如何遍历列表映射并将数据收集到列表