看到这个代码: (这是工作的代码,但我不喜欢用2线所以找我怎样才能使它更好)Java的8个流 - 或条件
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);
}
什么错误?你尝试了什么?这很重要。 – Carcigenicate
我没有downvote,但这是一个很差的问题。 – Carcigenicate
items = Arrays.stream(items).filter(x - >!x.getName()。equalsIgnoreCase(“redirect”)|| x - >!x.getName()。equalsIgnoreCase(“success”))。toArray( ItemDetails [] ::新); – Rockoder