java - 获取对象列表的组
问题描述
我有一个称为卡车的 Java 类和另一个称为卡车零件的类。我想以波纹管指定的格式获取输出的集合。我已经尝试过对我不起作用的集合,并且给了我意想不到的结果。
public class Truck {
private String name;
private int qty;
private BigDecimal price;
private List<Integer> platIds = new ArrayList<>();
// Constructor and getters and setters
我还有一堂课:
public class TruckParts {
private Integer id;
private String namepart;
private int qtypart;
private BigDecimal pricepart;
private Truck truck = new Truck();
// Constructor and getters and setters
我收到了以下对象列表形式的输入:
[
{
"id": 1,
"namepart":"val",
"qtypart":"fg",
"pricepart":120,
"name":"valasdhjk",
"qty" :"sdfg",
"price":123,
"partid":1
},
{
"id": 1,
"namepart":"val",
"qtypart":"fg",
"pricepart":120,
"name":"valasdhjk",
"qty" :"sdfg",
"price":123,
"partid": 1
},
{
"id": 2,
"namepart":"val",
"qtypart":"fg",
"pricepart":120,
"name":"valasdhjk",
"qty" :"sdfg",
"price":123,
"partid":1
},
{
"id": 2,
"namepart":"val",
"qtypart":"fg",
"pricepart":120,
"name":"valasdhjk",
"qty" :"sdfg",
"price":123,
"partid":2
}
]
现在我希望这个输出转换成这种形式:
[
{
"id": 1,
"namepart":"val",
"qtypart":"fg",
"pricepart":120,
"truck":{
"name":"valasdhjk",
"qty" :"sdfg",
"price":123,
"partids":[1,2]
}
},
{
"id": 2,
"namepart":"val",
"qtypart":"fg",
"pricepart":120,
"truck:"{
"name":"valasdhjk",
"qty" :"sdfg",
"price":123,
"partids":[1,2]
}
}
]
我试过用地图。
Map<BigDecimal, List<TruckParts>> groupByid =
items.stream().collect(Collectors.groupingBy(TruckParts::getId));
但这似乎不是我想要的。有人可以告诉我获得此结果的最佳方法吗?
解决方案
你正朝着正确的方向前进:
Map<BigDecimal, List<TruckParts>> groupById =
items.stream().collect(Collectors.groupingBy(TruckParts::getId));
有了它Map<BigDecimal, List<TruckParts>>
,您可以将每个条目映射到一个Truck
对象:
groupById.entrySet().stream().map(x -> {
// assuming your constructor's parameters go in the order of name, qty, price, platIds
return new Truck(x.getValue().get(0).getNamePart(),
x.getValue().get(0).getQtyPart(),
x.getValue().get(0).getPricePart(),
x.getValue().stream().map(TruckPart::getPartId).collect(Collectors.toList()));
})
推荐阅读
- winforms - 在远程 Windows Server 上复制小文件需要时间
- spring-boot - Spring Boot:记录属性
- javascript - 如何在javascript函数中使用/绑定角度变量
- scrapy - Scrapy spider 在队列中侦听种子 URL 以爬行?
- android - 在 Android Studio 的操作栏中的菜单项中添加编辑文本
- php - xor 运算符在 PHP 和 Visual Basic 中的工作方式不同
- jquery - 为什么 jquery click 事件会触发两次
- angular - 从带有 Web API 端点的简单 HTML 表单上传文件显示“ERR_CONNECTION_RESET”
- symfony - 返回带有异常监听器的 json
- css - 移动 safari 不支持 feDisplacementMap svg 过滤器吗?