gpt4 book ai didi

java - 使用自定义函数从多个源java 8构造对象

转载 作者:搜寻专家 更新时间:2023-11-01 01:39:36 25 4
gpt4 key购买 nike

我有多个来源( map ),我在其中存储与不同属性相关的数据,这些属性注定要构造具有 id 的最终对象。这些 map 根据这种模式具有不同的结构:

map

  • id 是我的最终对象 FinalObject 的标识符
  • X1, X2 是我的最终对象 FinalObject 的属性

在实际代码中我有几个 map 如下:

Map<Integer, String> descriptions;
Map<Integer, Double> prices;
Map<Integer, Double> quantities;
Map<Integer, String> currencies;

我可以将我的集合流与 Stream.of() 合并,但我有两个问题要处理,异构映射的结构以及我想为每个条目创建一个 Final Java8 方式的对象。

我认为我的 MultipleFunction 是 BiFunction 我为 FinalObject 定义的属性作为参数。作为设计可以吗?

有什么意见或建议吗?

合并后的结果是这样的:

Stream.of(descriptions.entrySet(), prices.entrySet(), quantities.entrySet(), currencies.entrySet())
.flatMap(Set::stream)
.collect(Collectors.toMap(Map.Entry::getKey, entry -> new FinalObject(description, price, quantity, currency)));

此代码无法编译,是为了更好地理解我的问题。

最佳答案

获取 ID 号流...

descriptions.keySet().stream()

...然后在四个map中查找ids:

descriptions.keySet().stream()
.map(id -> {
String description = descriptions.get(id);
Double price = prices .get(id);
Double quantity = quantities .get(id);
String currency = currencies .get(id);

return new FinalObject(description, price, quantity, currency);
});

这假设 descriptions 对每个 id 都有一个条目。如果不是,请根据需要进行调整。

如果您希望可以通过遍历 entrySet() 而不是 keySet() 来保存一次查找。

descriptions.entrySet().stream()
.map(e -> {
int id = e.getKey();

String description = e.getValue();
Double price = prices .get(id);
Double quantity = quantities.get(id);
String currency = currencies.get(id);

return new FinalObject(description, price, quantity, currency);
});

关于java - 使用自定义函数从多个源java 8构造对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55652444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com