Ily*_*lya 3 java java-8 java-stream
我有一个问题是收集一些列表值到桶.例如,假设我有一个字符串列表:
List<String> strs = Arrays.asList("ABC", "abc", "bca", "BCa", "AbC");
Run Code Online (Sandbox Code Playgroud)
我想把字符串放入集合(或列表)集合中,它们只包含不同的字符串,例如上面它将是两个集合的集合: [["ABC", "abc", "AbC"], ["bca", "BCa"]]
所以请帮我写这个问题的收藏家.
List<Set<String>> result = strs.stream()
.collect(/* some collectors magic here */)
Run Code Online (Sandbox Code Playgroud)
Ale*_* C. 11
您正在寻找的"一些收藏家魔术"可以分两步完成:
String#toLowerCase
所以完成这项工作(不要忘记带有Locale
as参数的重载方法).您还希望分组的值是唯一的,以便您可以使用重载版本groupingBy
将它们放入Set
(默认实现使用a 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())));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2557 次 |
最近记录: |