有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我一直在理解如何将两个物体合并在一起,请解释

目标是防止在解析另一个页面上的信息时,另一个页面上的一个属性出现这种情况,所以我正在生成一个方法,该方法收集到映射(key(invoice number))和值将是完全收缩的对象

public BenettonGroupPackingList combinePackingLists(BenettonGroupPackingList one, BenettonGroupPackingList two) {

}



public Map<String, BenettonGroupPackingList> groupByPackingListInvoiceNumber() {

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

public class BenettonGroupPackingList {

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

共 (1) 个答案

  1. # 1 楼答案

    免责声明:您的类名称有点误导,代码似乎不完整。此外,有多种方法可以组合对象,在这些情况下,输入和所需输出的示例可以很好地解释问题。以上这些让我很难理解你想要达到的目标,所以我会尽我所能回答你,但要知道你还有一些工作要做


    假设涉及到列表(这将证明帖子中的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属性,选择所需的属性(可能不是空的),将输出保存在新的BenettonGroupPackingList对象中(例如:groups.entrySet().stream().map(e -> new BenettonGroupPackingList(e.getKey(), e.getValue().stream().anyMatch(x -> x.getNetWeight() != null ), e.getValue().stream.anyMatch(...)))
    3. 输出BenettonGroupPackingList对象的结果集合