Jon*_*nny 11 java android java-stream
我有这个方法:
filteredListIn.addAll(Stream.of(listRef)
.filter(results ->
results.getTitle().contains(query.toString().toLowerCase())
));
Run Code Online (Sandbox Code Playgroud)
有了这两个变量:
private List<Results> listRef = new ArrayList<>();
List<Results> filteredListIn = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
但我得到
为 addAll(Stream) 找到了已过滤的ListIn.addAll(Stream.of(listRef) ^ 方法 Collection.addAll(Collection) 不适用(参数不匹配;Stream 无法转换为 Collection)方法 List.addAll(Collection) 不适用
有什么问题,我该如何解决?
这可能是因为我使用外部库来支持 api 24 下的流吗?
Tit*_*lum 10
您必须收集列表中的所有流元素才能将其添加到集合中:
filteredListIn.addAll(listRef.stream()
.filter(results -> results.getTitle().contains(query.toString().toLowerCase()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
FYIStream.of(listRef)
会给后面List<Results>
并没有方法.getTitle()
上List
。我认为你的意思是做listRef.stream().filter...
而不是Stream.of(listRef).filter...
无论如何,这是一个标准示例,它表明您不应该对每个操作都使用流。您可以将流减少到:
listRef.removeIf(results -> !results.getTitle().contains(query.toString().toLowerCase()));
filteredListIn.addAll(listRef);
Run Code Online (Sandbox Code Playgroud)
注意:.removeIf
将有效地操作,listRef
所以clone
如果需要,你应该这样做。