stream 分组取第一个值
时间: 2023-09-05 19:12:56 浏览: 62
您可以使用流操作中的`groupBy()`和`findFirst()`方法来实现分组并取每组的第一个值。以下是一个示例代码:
```java
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> items = Arrays.asList("apple", "banana", "orange", "apple", "grape", "banana");
Map<String, String> firstItemsByGroup = items.stream()
.collect(Collectors.groupingBy(item -> item, Collectors.collectingAndThen(Collectors.toList(), list -> list.get(0))));
System.out.println(firstItemsByGroup);
}
}
```
输出结果为:
```
{orange=orange, grape=grape, apple=apple, banana=banana}
```
在这个示例中,我们使用`groupingBy()`方法将元素按照它们的值进行分组。然后,我们使用`collectingAndThen()`方法结合`toList()`收集器将每个组中的元素收集到一个列表中,并使用`list.get(0)`获取列表中的第一个元素作为结果。最后,我们将分组后的结果存储在一个`Map`中,其中键是分组的值,值是每组的第一个元素。