如何解决列表流未正确过滤
我在流式传输时遇到列表问题。如果减少流,则会得到正确的结果,但是如果我过滤流并调用 findFirst(),则会得到空结果。为什么?我该怎么办?
索引-包含地图中的数据:
public class Index {
private final Map<String,String> data = new HashMap<>();
public String getData(String name) {
return data.getOrDefault(name,"");
}
public Set<String> getDataNames() {
return data.keySet();
}
@Override
public String toString() {
return data.toString();
}
}
IndexList -在列表中包含索引对象,填充是在 Main 类中调用 load()方法:
public enum IndexList {
INDICES_0("First list",new LinkedList<>(Arrays.asList("name","surname","an")));
private List<Index> loaded;
private final String name;
private final Queue<String> nameQueue;
IndexList(String name,Queue<String> nameQueue) {
this.name = name;
this.nameQueue = nameQueue;
}
public Index get(int id) {
return loaded.get(id-1);
}
public List<Index> getLoaded() {
return loaded;
}
public void load() {
this.loaded = new LinkedList<>();
// ... > loading from xml file
List<Index> loaded = this.loaded;
this.loaded = new ArrayList<>(loaded);
loaded.clear();
}
public Queue<String> queueNames() {
return new LinkedList<>(nameQueue);
}
public String getName() {
return name;
}
}
正常运行时,我看到应该在GUI中显示一些Index对象,但事实并非如此。所以我在调试器中运行程序并添加了手表。
在调试器中:
IndexList.INDICES_0.loaded.size() = 558
IndexList.INDICES_0.loaded.stream().get(0) = {Index@1700} "{surname=Smith,name=John,an=1/2000}"
IndexList.INDICES_0.loaded.stream().reduce((i0,i1) -> i1.getData("surname").equals("Smith") && i1.getData("name").equals("John")? i1 : i0) = {Optional@1623} "Optional[{surname=Smith,an=1/2000}]"
IndexList.INDICES_0.loaded.stream().filter(i -> i.getData("surname").equals("Smith") && i.getData("name").equals("John")).findFirst() = {Optional@1640} "Optional.empty"
解决方法
我解决了问题:字符串集中的是 UTF-8 BOM 字符,而相同的姓氏在不同的地方。 因此, reduce方法返回了流中的第一个对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。