【发布时间】:2023-03-15 10:00:01
【问题描述】:
假设我有这个代码:
Map<String, String> map;
// later on
map.entrySet().stream().map(MyObject::new).collect(Collectors.toList());
我有一个MyObjectConstructor,它接受两个String 类型的参数。
我希望能够做到这一点,但我做不到。
我知道我可以做到e -> new MyObject(e.getKey(), e.getValue()),但更喜欢MyObject::new。
类似的代码适用于Set<String> 和List<String>,具有MyObject 类的一个参数构造函数。
【问题讨论】:
-
map函数不知道 2 个必要的Strings 位于Map.Entry实例内部的某个位置。您必须手动提取键和值,因此您需要使用e.getKey()和e.getValue()。 -
为什么更喜欢方法参考?当它符合要求时它很优雅,但在这里它不符合要求。
-
见this
-
您可以使用来自this answer的
PairStream;PairStream.from(map).map(MyObject::new).collect(Collectors.toList());
标签: java constructor java-8 mapping java-stream