jdk8 分组
时间: 2023-06-28 14:12:42 浏览: 49
在JDK8中,可以使用 `Collectors.groupingBy()` 方法进行分组操作。它接受一个`Function`参数,用于指定如何对元素进行分组,并返回一个`Map`对象,其中键是分组的标准,值是由该标准分组的元素列表。
例如,假设我们有一个`List`对象,其中包含一组人的信息,每个人有姓名和年龄两个属性,我们可以按照年龄来对这些人进行分组:
```java
List<Person> people = Arrays.asList(
new Person("Alice", 20),
new Person("Bob", 25),
new Person("Charlie", 30),
new Person("David", 35));
Map<Integer, List<Person>> peopleByAge =
people.stream()
.collect(Collectors.groupingBy(Person::getAge));
```
上面的代码将会得到这样一个`Map`对象:
```java
{
20=[Person{name='Alice', age=20}],
25=[Person{name='Bob', age=25}],
30=[Person{name='Charlie', age=30}],
35=[Person{name='David', age=35}]
}
```
它包含了按照年龄分组后的结果。
相关问题
jdk8 分组求和
在JDK8中,我们可以使用Stream API来对集合进行操作,其中包括分组、过滤、映射、归约等操作。下面是一个分组求和的示例代码:
假设有一个List<Goods> goodsList,其中Goods类包含属性name和price。现在需要按照name字段进行分组,然后对每组进行price字段求和。
```
Map<String, Double> result = goodsList.stream()
.collect(Collectors.groupingBy(Goods::getName, Collectors.summingDouble(Goods::getPrice)));
```
以上代码中,使用了groupingBy方法对Goods对象按照name字段进行分组,并且使用summingDouble方法对每组的price字段进行求和。最终得到了一个Map<String, Double>类型的结果集,其中键为name字段的值,值为该组的price字段求和结果。
jdk8 list分组求和
在JDK8中,可以使用Stream API对List进行分组求和操作。
首先,我们需要使用`groupingBy()`方法对List进行分组。`groupingBy()`方法接受一个分类函数,并将List中的元素按照该分类函数的返回值进行分组。例如,假设我们有一个List<Integer>,我们可以使用以下代码将其按照奇偶数进行分组:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
Map<String, List<Integer>> groups = numbers.stream()
.collect(Collectors.groupingBy(n -> n % 2 == 0 ? "偶数" : "奇数"));
```
接下来,我们可以使用`summingInt()`方法对分组后的元素进行求和。`summingInt()`方法接受一个获取元素的函数,并返回对应的求和结果。例如,我们可以使用以下代码对分组后的奇数进行求和:
```
Map<String, Integer> sumMap = groups.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
e -> e.getValue().stream().mapToInt(Integer::intValue).sum()
));
```
上述代码中,我们使用`toMap()`方法将分组后的结果转换为Map。`toMap()`方法需要提供一个key的获取函数和一个value的获取函数,我们通过`getKey()`获取了奇偶数的分类结果作为key,通过`getValue()`获取了对应的元素列表,然后通过`sum()`方法对元素列表进行求和。
最后,我们可以通过输出Map的方式查看分组求和的结果:
```
sumMap.forEach((group, sum) -> System.out.println(group + ": " + sum));
```
上述代码中,我们使用`forEach()`方法遍历Map,并打印每个分组和对应的求和结果。
综上所述,我们可以利用Stream API中的`groupingBy()`方法和`summingInt()`方法对List进行分组求和操作。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)