如果我在java 8中有并行流,并且我使用anyMatch终止,并且我的集合有一个与谓词匹配的元素,我试图弄清楚当一个线程处理这个元素时会发生什么.
我知道anyMatch是短路的,因此我不希望在处理匹配元素后处理更多元素.我的困惑是关于其他线程发生了什么,可能是在处理元素的中间.我可以想到3个看似合理的场景:a)他们被打断了吗?b)他们是否继续处理他们正在处理的元素,然后,一旦所有线程都无所事事,我得到我的结果?c)我是否得到了我的结果,但是处理其他元素的线程继续处理这些元素(但是一旦完成就不再采用其他元素)?
我有一个长期运行的谓词,一旦我知道一个元素匹配就很快终止它.我担心一点,因为我在文档中找不到它可能是依赖于实现的东西的信息,这也是很好的.
谢谢
我想知道HashMap它的所有值是否为空.除了必须检查地图中每个条目的值之外,最好的方法是什么?
HashMap<Long, Optional<Long>> aMap = new HashMap<>();
aMap.put(new Long(55), Optional.empty());
aMap.put(new Long(66), Optional.empty());
aMap.put(new Long(77), Optional.empty());
aMap.put(new Long(99), Optional.empty());
Run Code Online (Sandbox Code Playgroud) 我有一个方法,效果很好。这就是它的样子。
private boolean roomWithMoreThanTenFurnitures(Building building) {
if (building != null && building.hasRooms()) {
for (Room room : building.getRooms()) {
if (room.getFurnitures.size() > 10) {
return true;
}
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我想把它切换到 Lambda。uo 是用 shell 进来的,但是我不知道外面如何填写 if(条件) return true 或 return false。
building.getRooms().forEach(room -> {
//??
});
Run Code Online (Sandbox Code Playgroud)