我想知道如何从包含特定值的集合中获取所有元素。
赞:
list.removeIf(c -> c.getCarColor() == Color.BLUE);
但是我想直接过滤集合。我读到可以使用LAMBDA做到这一点,例如:
driver.find_element_by_css_selector("a[title*='Permalink']")
但是我不知道如何应用这个例子。
谢谢。
答案 0 :(得分:7)
使用流和filter
:
salesList.stream()
.filter(sale -> sale.getMap().equals(mapName)) // I've changed map to mapName as I am assuming that was a mistake
.collect(Collectors.toCollection(HashSet::new));
此保留满足提供的谓词sale -> sale.getMap().equals(mapName)
的元素。
请注意,以上不会进行修改,如果您想修改源,请继续执行removeIf
:
salesList.removeIf(sale -> !sale.getMap().equals(mapName));
这删除了满足所提供谓词sale -> !sale.getMap().equals(mapName)
的元素。
答案 1 :(得分:4)
从方法名selectSales
来看,您不想从原始列表中删除条目,而是想要构造一个新集合,从源中复制元素并按条件过滤掉某些值。
条件为sale.getMap().equals(mapName)
。请注意,我使用的是mapName
而不是map
,这似乎是一个错字。
salesList.stream()
.filter(sale -> sale.getMap().equals(mapName))
.collect(Collectors.toList());
假设salesList
不是null
,则该方法的更强大版本看起来像
public Collection<Sale> selectSales(String mapName) {
Objects.requireNonNull(mapName, "mapName");
return salesList.stream()
.filter(sale -> mapName.equals(sale.getMap()))
.collect(Collectors.toList());
}