0

我有一个从外部 API 返回的对象列表,每个对象如下所示:

public class Item {
    public String id;
    public int processingType;
    public String appliedToItemId;
    public Float chargeAmount;
}

值为 1的对象processingType需要“应用”到另一个 aprocessingType为 0 的对象。这些对象与appliedToItemId和链接id。将对象分组后,我希望能够将它们合并为一个对象。

这是我可以用 C# 中的 LINQ 做的事情,但想了解 Java 8 中引入的流是否有可能。

C# 会是这样的:

// seperate out items into two lists (processingTypeOneItems, processingTypeTwoItems)
...

// join items
var joinedItems =
    from i in processingTypeTwoItems
    join j in processingTypeOneItems on i.id equals j.appliedToItemId into gj
    from item in gj.DefaultIfEmpty()
    select new { id = i.id, chargeAmount = i.chargeAmount, discountAmount = item?.chargeAmount ?? 0 }; 

可以看出,项目被匹配i.id == j.appliedToItemId,然后对象被合并为匿名类型的对象。我真的很困惑,因为我看到的大多数示例都只是按一个属性分组。

在 Java 中是否可以以这种自定义方式进行分组,将一个属性的值与另一个属性的值进行比较?

4

1 回答 1

1
        var joinedItems = processingTypeTwoItems.stream()
                .map(item -> new Item() {{
                        id = item.id;
                        processingType = item.processingType;
                        appliedToItemId = item.appliedToItemId;
                        chargeAmount = processingTypeOneItem.stream().filter(i -> i.appliedToItemId.equals(item.id)).findFirst().orElse(new Item() {{chargeAmount = 0.0f;}}).chargeAmount;
                    }}).collect(Collectors.toList());
于 2022-02-19T09:53:43.657 回答