我在收集一些列表值到存储桶时遇到问题。例如,假设我有一个字符串列表:
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 */)
您正在寻找的“收藏家的魔力”可以通过两个步骤完成:
String#toLowerCase
执行此工作(不要忘记以Locale
as为参数的重载方法)。您还希望分组的值是唯一的,因此您可以使用重载版本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] 删除。
我来说两句