看到這個代碼: (這是工作的代碼,但我不喜歡用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