jdk8 分组求和
时间: 2023-06-28 07:12:41 浏览: 85
在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进行分组求和操作。
jdk8BigDecimal求和
在 JDK8 中,我们可以使用 BigDecimal 的 add() 方法来实现两个 BigDecimal 数字的求和。例如:
```java
BigDecimal num1 = new BigDecimal("1.23");
BigDecimal num2 = new BigDecimal("4.56");
BigDecimal sum = num1.add(num2);
System.out.println(sum);
```
在这个例子中,我们创建了两个 BigDecimal 对象,然后使用 add() 方法对它们进行求和。最后,我们将结果打印到控制台上。
需要注意的是,BigDecimal 类型的数字在进行运算时,需要使用对应的方法,如 add()、subtract()、multiply() 和 divide() 等,而不能像普通的数字类型一样直接使用运算符。
阅读全文