看这段代码: (这段代码可以正常运行但是我不想使用2行,所以想知道如何改进)
ItemDetails[] items = response.getDetailsList();
items = Arrays.stream(items).filter(x -> !x.getName().equalsIgnoreCase("acl1")).toArray(ItemDetails[]::new);
items = Arrays.stream(items).filter(x -> !x.getName().equalsIgnoreCase("acl2")).toArray(ItemDetails[]::new);
我不知道如何在filter
中使用OR(|)
条件来删除List
中的两个特定元素,因为这会导致编译时错误(在IDE中),所以我最终使用了上面的两个filters
。
我可能漏掉了什么?
items = Arrays.stream(items).filter(x -> !x.getName().equalsIgnoreCase("acl1") ||
x -> !x.getName().equalsIgnoreCase("acl2")).toArray(ItemDetails[]::new);
=> IntelliJ 会对此(上面)抱怨。
items = Arrays.stream(items).filter(x -> !x.getName().equalsIgnoreCase("acl1"") ||
x.getName().equalsIgnoreCase("acl2")).toArray(ItemDetails[]::new);
在运行时不起作用(它不进行过滤)
包含注释代码的完整代码(我尝试过的)供参考
public static void mapTest () {
AclDetailItem[] items = new AclDetailItem[3];
AclDetailItem item1 = new AclDetailItem();
item1.setAclName("acl1");
AclDetailItem item2 = new AclDetailItem();
item2.setAclName("acl2");
AclDetailItem item3 = new AclDetailItem();
item3.setAclName("acl3");
items[0] = item1;
items[1] = item2;
items[2] = item3;
System.out.println ("Before " + items.length);
items = Arrays.stream(items).filter(x -> !x.getAclName().equalsIgnoreCase("acl1")).toArray(ItemDetails[]::new);
items = Arrays.stream(items).filter(x -> !x.getAclName().equalsIgnoreCase("acl2")).toArray(ItemDetails[]::new);
System.out.println ("After " + items.length);
}
||
,可能这是你的问题? - scrappedcolax->
... - TunakiItemDetails[] items = Arrays.stream(response.getDetailsList()) .filter(x -> !x.getName().equalsIgnoreCase("acl1")) .filter(x -> !x.getName().equalsIgnoreCase("acl2")) .toArray(ItemDetails[]::new);
- Holger