在这个程序中,有一个类型错误,我似乎无法修复。该程序是由 ChatGPT 生成的,他生成的所有其他实现都是正确的。错过了什么?
public class Main {
public static void main(String[] args) {
// Create a stream of integers from 1 to 10
IntStream stream = IntStream.range(1, 11);
// Process the stream in chunks of size 3 using a spliterator
int chunkSize = 3;
List<List<Integer>> chunks =
StreamSupport.stream(
new Spliterator<Integer>() {
private final Spliterator<Integer> spliterator = stream.spliterator();
private final List<Integer> chunk = new ArrayList<>(chunkSize);
@Override
public boolean tryAdvance(Consumer<? super Integer> action) {
if (chunk.size() == chunkSize) {
action.accept(new ArrayList<>(chunk)); // TypeError
chunk.clear();
return true;
}
if (spliterator.tryAdvance(
elem -> {
chunk.add(elem);
if (chunk.size() == chunkSize) {
action.accept(new ArrayList<>(chunk)); // TypeError
chunk.clear();
}
})) {
if (!chunk.isEmpty()) {
action.accept(new ArrayList<>(chunk)); // TypeError
chunk.clear();
}
return true;
}
return false;
}
@Override
public Spliterator<Integer> trySplit() {
return null;
}
@Override
public long estimateSize() {
return spliterator.estimateSize();
}
@Override
public int characteristics() {
return spliterator.characteristics();
}
},
false)
.toList();
// Print the chunks
for (List<Integer> chunk : chunks) {
System.out.println(chunk);
}
}
Consumer<? super Integer> action
期望接受 Integer
类型的对象,但您正在提供 List<Integer>
类型的对象。
这不可能编译:
Consumer<? super Integer> action = // ...
action.accept(new ArrayList<Integer>());
这可以:
Consumer<? super ArrayList<Integer>> action = // ...
action.accept(new ArrayList<Integer>());