将两个对象合并为一个对象

时间:2019-12-13 09:29:29

标签: java java-stream

我一直坚持了解如何将两个对象合并在一起,不胜感激

目标是防止解析其中一个信息时位于另一页上的属性之一的情况,因此我正在生成一种方法来收集要映射的信息(键(发票编号),并且值将完全收缩对象

public BenettonGroupPackingList combinePackingLists(BenettonGroupPackingList one, BenettonGroupPackingList two) {

}



public Map<String, BenettonGroupPackingList> groupByPackingListInvoiceNumber() {

    return groupPackingLists().stream()
            .collect(Collectors.toMap(BenettonGroupPackingList::getNumeroInternoNumber,
                    list -> list, this::combinePackingLists));
}
  

公共类BenettonGroupPackingList {

private String netWeight;
private String grossWeight;
private String numeroInternoNumber;

1 个答案:

答案 0 :(得分:0)

免责声明:您的类的名称有点误导,并且代码似乎不完整。此外,有多种组合对象的方法,在这些情况下,输入和所需输出的示例对解释问题有很大帮助。上面的内容使您很难理解要达到的目标,因此我将尽我所能来回答问题,但是请注意,还有一些工作要做。


假设其中包含列表(这将证明帖子中的java-stream标签是正确的),而您要做的只是获取一个串联列表,您可以按照以下步骤进行操作:

List combined_list = Stream.of(list_a, list_b).flatMap(Collection::stream).collect(Collectors.toList());

以上内容不会删除任何重复项,因此仅是两个集合的串联。


但是您的课程似乎没有列出,因此将它们组合在一起是一个完全不同的故事。 按照目前的状态,似乎您要合并每个对象的相应属性,同时确保按numeroInternoNumber对它们进行分组。这样的操作要复杂得多,因此设计算法本质上就是您的工作,因此...我将限制自己的工作范围:

  1. numeroInternoNumber将订单分组。您可以使用groupingBy收集器(此处的示例:https://www.baeldung.com/java-groupingby-collector)。这应该给您一个像Map<String, List<BenettonGroupPackingList>>这样的对象,可以在后续步骤中进行处理
  2. 对于每个组,遍历组中的对象,检查netWeightgrossWeight属性,选择所需的属性(可能不是空的属性),然后将输出保存到新的{{1} }个对象(例如:BenettonGroupPackingList
  3. 输出groups.entrySet().stream().map(e -> new BenettonGroupPackingList(e.getKey(), e.getValue().stream().anyMatch(x -> x.getNetWeight() != null ), e.getValue().stream.anyMatch(...)))个对象的结果集合