使用stream流来group by分组
时间: 2023-08-29 15:12:17 浏览: 117
好的,您可以使用Java 8中的Stream API来对集合进行分组。具体实现可以使用 `Collectors.groupingBy(...)` 方法。这个方法接受一个 `Function` 参数,用于定义分组规则。例如:
```java
List<String> words = Arrays.asList("apple", "banana", "cat", "dog", "elephant", "fox", "grape");
// 使用 Stream 分组
Map<Character, List<String>> groups = words.stream()
.collect(Collectors.groupingBy(word -> word.charAt(0)));
// 输出结果
System.out.println(groups);
```
输出结果应该是:
```
{a=[apple], b=[banana], c=[cat], d=[dog], e=[elephant], f=[fox], g=[grape]}
```
这里我们将 `words` 列表按首字母分组,得到了每个字母开头的单词列表。
相关问题
使用stream流来group by分组并去重
可以使用 stream 的 distinct 和 groupingBy 方法来实现。例如,假设有一个 List<String>,我们想要根据字符串长度进行分组,并保留每个组中的唯一元素,可以使用以下代码:
List<String> strings = Arrays.asList("aa", "bbb", "ccc", "d", "ee", "ff", "ggg");
Map<Integer, String> result = strings.stream()
.distinct()
.collect(Collectors.groupingBy(String::length,
Collectors.collectingAndThen(Collectors.toList(), list -> list.get(0))));
这段代码将 List<String> 中的元素按照长度进行分组,并只保留每个组中的第一个元素。最终得到的是一个 Map<Integer, String>,其中键值对为每个分组的长度和对应的字符串。
使用stream流来group by分组并取第一个
对于你的问题,我可以提供以下Java代码实现:
```java
List<String> list = new ArrayList<>();
Map<String, String> map = list.stream()
.map(s -> s.split(","))
.collect(Collectors.toMap(arr -> arr[0], arr -> arr[1], (s1, s2) -> s1));
```
这段代码将List<String>中的每个字符串使用","分隔开,然后将分隔后的第一个元素作为Key,第二个元素作为Value,使用collect将它们收集到Map中,并且去重仅保留第一个Value。
阅读全文