我有一个类似于this堆栈溢出问题的用例,并试图在不将结果存储在List<List<String>>
中的情况下使用它,而是在它上调用stream()
.
如果因为类型不匹配而不将其赋值为List<List<String>>
,则会出现奇怪的编译时错误.要重现这个问题,只需注释掉要输出的赋值.
问题是为什么会发生这种编译错误?以及如何修复它?
public static void main(String args[]) {
List<String> input = Arrays.asList("RED", "RED", "BLUE", "BLUE", "BLUE", "BLUE", "RED", "RED");
List<List<String>> output = // if this line commented it doesn't compile
input.stream()
.collect(Collector.of(
ArrayList::new,
(accumulator, item) -> {
if (accumulator.isEmpty()) {
List<String> list = new ArrayList<>();
list.add(item);
accumulator.add(list);
} else {
List<String> last = accumulator.get(accumulator.size() - 1);
if (last.isEmpty() || last.get(0).equals(item)) {
last.add(item);
} else {
List<String> list = new ArrayList<>();
list.add(item);
accumulator.add(list);
}
}
},
(left, right) -> {
left.addAll(right);
return left;
}
));
}
我的 idea 是这样使用它:
input.stream()
.collect(Collector.of(.....))
.stream()
.(and do something else)