java stream分组
时间: 2023-09-24 16:05:33 浏览: 43
Java Stream的分组功能是通过Collectors.groupingBy()方法来实现的。该方法会根据给定的分组条件,将流中的元素分为不同的组,并返回一个Map对象,其中Key为分组条件,Value为对应的分组结果。例如,对于一组数字,可以根据它们的奇偶性来分组,代码如下:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
Map<Boolean, List<Integer>> groups = numbers.stream()
.collect(Collectors.groupingBy(n -> n % 2 == 0));
System.out.println(groups);
// Output: {false=[1, 3, 5], true=[2, 4, 6]}
```
该代码将根据数字的奇偶性将它们分为两组,并返回一个Map对象,其中Key为true/false,Value为对应的分组结果。
相关问题
Java stream 分组
Java 8引入的Stream API提供了一种方便的方式来对集合进行分组操作。在Stream中,可以使用`Collectors.groupingBy()`方法进行分组。以下是一个示例代码:
```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> fruits = Arrays.asList("apple", "banana", "orange", "apple", "banana");
// 按照水果的首字母进行分组
Map<Character, List<String>> groupedByFirstChar = fruits.stream()
.collect(Collectors.groupingBy(fruit -> fruit.charAt(0)));
System.out.println(groupedByFirstChar);
}
}
```
上述代码将会输出以下结果:
```
{a=[apple, apple], b=[banana, banana], o=[orange]}
```
在这个例子中,我们使用`Collectors.groupingBy()`方法按照水果的首字母进行了分组。最终的结果是一个`Map`,其中键是首字母,值是按照首字母进行分组的水果列表。
除了按照单个属性进行分组外,我们还可以使用多级分组,或者在分组时进行其他操作,比如计数、求和等。Stream API提供了丰富的方法来支持这些操作。
java stream 分组
Java 8 中的 Stream API 提供了一个非常方便的方法来对集合中的元素进行分组。
可以使用 `Collectors.groupingBy()` 方法来实现分组操作。该方法接收一个 Function 作为参数,该函数将每个元素映射到一个键值,然后返回一个 Map,其中键是映射结果,值是对应的元素列表。
例如,假设有一个包含员工对象的列表,可以按照员工的部门进行分组,代码如下:
```
List<Employee> employees = ...;
Map<String, List<Employee>> employeesByDepartment = employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment));
```
在上面的代码中,`Employee::getDepartment` 是一个方法引用,它将每个员工对象映射到其所属的部门。`Collectors.groupingBy()` 方法将按照部门将员工对象分组,并返回一个 `Map<String, List<Employee>>` 类型的结果。
注意,`groupingBy()` 方法还可以接收一个第二个参数,该参数指定了分组后每个组中元素的类型。例如,可以将上面的示例代码修改为以下形式:
```
Map<String, Set<Employee>> employeesByDepartment = employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment, Collectors.toSet()));
```
在这个例子中,我们将使用 `Collectors.toSet()` 方法来指定每个组中元素的类型为集合,而不是列表。