【发布时间】:2016-11-11 15:33:19
【问题描述】:
查看这段代码: (这是工作代码,但我不喜欢使用 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 之类的更多。
我可能会错过什么?
这就是我尝试使用 OR 的方式
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);
}
【问题讨论】:
-
什么错误?你尝试了什么?这很重要。
-
我没有投反对票,但这是一个糟糕的问题。
-
items = Arrays.stream(items).filter(x -> !x.getName().equalsIgnoreCase("redirect") || x->!x.getName().equalsIgnoreCase("成功")).toArray(ItemDetails[]::new);
-
@Rockoder 请将其编辑为原始问题。
-
删除你的第二个
x->...
标签: java lambda java-8 java-stream