gpt4 book ai didi

Java 8 Stream API 收集器 - addAll 不适用于参数对象,addAll 未定义类型对象

转载 作者:行者123 更新时间:2023-11-29 04:38:57 25 4
gpt4 key购买 nike

我的代码没有编译,我不太清楚为什么。这是代码:

ArrayList<ClassificationData> classifications = productData
.stream()
.filter(p -> CollectionUtils.isNotEmpty(p.getClassifications()))
.flatMap(p -> p.getClassifications().stream())
.collect(groupingBy(ClassificationData::getName,
mapping(ClassificationData::getFeatures,
Collector.of(LinkedHashSet<FeatureData>::new,
(a,b) -> b.addAll(a),
(a,b) -> {
b.addAll(a);
return b;
})
)))
.entrySet()
.stream()
.map(e -> {
ClassificationData c = new ClassificationData();
c.setName(e.getKey());
c.setFeatures(e.getValue());
return c;
})
.collect(Collectors.toCollection(ArrayList::new));

错误:

    (a,b) -> b.addAll(a),
The method addAll(Collection<? extends FeatureData>) in the type Collection<FeatureData> is not applicable for the arguments (Object)

b.addAll(a);
The method addAll(Object) is undefined for the type Object

c.setFeatures(e.getValue());
The method setFeatures(Collection<FeatureData>) in the type ClassificationData is not applicable for the arguments (Object)

我还尝试了 Set::add 和 Set::addAll,结果几乎相同。

编辑:

我已经完成了这段代码。请告诉我是否有更简洁的方法来执行此操作,或者是否可以?

ArrayList<ClassificationData> classifications = productData
.stream()
.filter(p -> CollectionUtils.isNotEmpty(p.getClassifications()))
.flatMap(p -> p.getClassifications().stream())
.collect(groupingBy(ClassificationData::getName,
mapping(ClassificationData::getFeatures,
toCollection(LinkedHashSet::new)
)))
.entrySet()
.stream()
.map(e -> {
ClassificationData c = new ClassificationData();
c.setCode(e.getKey());
c.setName(e.getKey());
c.setFeatures(e.getValue()
.stream()
.filter(CollectionUtils::isNotEmpty)
.flatMap(p -> p.stream())
.filter(distinctByKey(FeatureData::getName))
.collect(toCollection(ArrayList::new)));
return c;
})
.collect(toCollection(ArrayList::new));

最佳答案

我认为您在第一个 lambda 中弄乱了参数的顺序;应该是

(set, a) -> set.add(a)

...尽管坦率地说,将整个 Collector 创作替换为

会更好
toCollection(LinkedHashSet::new)

这是等价的。

关于Java 8 Stream API 收集器 - addAll 不适用于参数对象,addAll 未定义类型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40072975/

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