java stream分组
时间: 2023-10-29 18:07:38 浏览: 35
Java Stream分组可以使用Collectors.groupingBy()方法来实现。该方法接受一个Function参数,用于指定根据哪个属性进行分组,返回一个Map对象,键为分组属性值,值为分组的数据列表。例如,可以使用以下代码将一个字符串数组按照长度分组:
String[] strs = {"a", "bb", "ccc", "dddd", "eeeee"};
Map<Integer, List<String>> groups = Arrays.stream(strs)
.collect(Collectors.groupingBy(String::length));
这样,groups就是一个Map对象,其中键为字符串长度,值为该长度的字符串列表。例如,groups.get(1)就是一个包含字符串"a"的列表,groups.get(2)就是一个包含字符串"bb"的列表,以此类推。
相关问题
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()` 方法来指定每个组中元素的类型为集合,而不是列表。