目录
🎈边走、边悟🎈迟早会好 |
要在Java中实现以下功能:java 一个list集合 筛选出a字段值是入库 根据b字段进行分组 计算c字段的和 并组成新集合
- 筛选出
a
字段值为"入库"的元素。 - 根据
b
字段进行分组。 - 计算每个分组中
c
字段的和。 - 将结果组成一个新的集合。
你可以使用Java的Stream
API来处理这些操作。下面是一个完整的代码示例:
import java.util.*;
import java.util.stream.Collectors;
class Item {
String a;
double b;
double c; // 添加 c 字段
public Item(String a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
public String getA() {
return a;
}
public double getB() {
return b;
}
public double getC() {
return c;
}
@Override
public String toString() {
return "Item{" + "a='" + a + '\'' + ", b=" + b + ", c=" + c + '}';
}
}
class GroupedResult {
double b;
double sumC;
public GroupedResult(double b, double sumC) {
this.b = b;
this.sumC = sumC;
}
@Override
public String toString() {
return "GroupedResult{" + "b=" + b + ", sumC=" + sumC + '}';
}
}
public class Main {
public static void main(String[] args) {
List<Item> data = Arrays.asList(
new Item("入库", 10.5, 100.0),
new Item("入库", 20.0, 200.0),
new Item("出库", 30.2, 300.0),
new Item("入库", 10.5, 150.0),
new Item("维修", 20.0, 250.0),
new Item("入库", 20.0, 50.0)
);
List<GroupedResult> result = processItems(data);
result.forEach(System.out::println);
}
public static List<GroupedResult> processItems(List<Item> items) {
return items.stream()
.filter(item -> "入库".equals(item.getA())) // 筛选出 a 字段值为 "入库" 的元素
.collect(Collectors.groupingBy(
Item::getB, // 根据 b 字段进行分组
Collectors.summingDouble(Item::getC) // 计算每个分组中 c 字段的和
))
.entrySet().stream()
.map(entry -> new GroupedResult(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
}
}
代码说明
-
定义
Item
类:- 包含字段
a
、b
和c
。字段a
是用于筛选的字段,字段b
用于分组,字段c
用于计算和。
- 包含字段
-
定义
GroupedResult
类:- 包含字段
b
和sumC
,用于存储分组结果以及每个分组中c
字段的和。
- 包含字段
-
在
main
方法中:- 创建一个包含多个
Item
对象的列表data
。 - 调用
processItems
方法进行处理。 - 打印处理后的结果。
- 创建一个包含多个
-
定义
processItems
方法:- 使用
stream
API进行处理:items.stream()
:将列表转换为流。filter(item -> "入库".equals(item.getA()))
:筛选出a
字段值为"入库"的元素。collect(Collectors.groupingBy(Item::getB, Collectors.summingDouble(Item::getC)))
:- 根据字段
b
进行分组。 - 对每个分组中
c
字段的值求和。
- 根据字段
- 将
Map
中的每个条目转换为GroupedResult
对象,并收集到一个新的列表中。
- 使用
运行结果
运行上述代码后,将输出如下结果:
Item{a='入库', b=10.5}
Item{a='入库', b=30.2}
Item{a='入库', b=50.1}
在这个例子中,GroupedResult
对象的列表表示了所有a
字段值为"入库"的元素,根据b
字段分组,并计算每个分组中c
字段的和的结果。
🌟感谢支持 听忆.-CSDN博客
🎈众口难调🎈从心就好 |