我有这种方法:
public void fields(TableField... s){
// compilation error on next line
Collection<String> fields = Arrays.asList(s).stream().map(v -> v.getValue());
this.fields.addAll(fields);
}
TableField很简单,就像:
class TableField {
public String getKey() {
return this.key;
}
public String getValue() {
return this.value;
}
}
但我看到此编译错误:
不兼容的类型。必需的集合,但推断出“地图” 要流式处理:不存在类型变量R的实例,因此 流符合Collection
答案 0 :(得分:3)
map
返回转换后的Stream
。如果要收集,则需要收集流。例如:
Collection<String> fields =
Arrays.asList(s).stream().map(v -> v.getValue()).collect(Collectors.toList());
答案 1 :(得分:2)
您需要collect
个元素,因此可以推断出类型:
Collection<String> fields = Arrays.stream(s) // Arrays.asList(s).stream()
.map(TableField::getValue) // map(v -> v.getValue())
.collect(Collectors.toList()); // or any other collection using 'Collectors.toCollection(<type>::new)'
答案 2 :(得分:2)
在这里使用流没有意义。只是传统的for
循环会产生更简洁,性能更高的代码:
for (v : s) fields.add(v.getValue());