Java 8 流 - 或条件

标签 java lambda java-8 java-stream

请看这段代码: (这是工作代码,但我不喜欢使用 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);
    }

最佳答案

您应该为每个条件创建多个谓词并使用或连接它。我添加了以下示例:

public class MeTest {

    Predicate<Integer> con1 = i -> i==0;
    Predicate<Integer> con2 = i -> i==1;
    Predicate<Integer> con3 = i -> i==2;

    @Test
    public void testOr() {
        List<Integer> asdas = IntStream.range(1, 10).boxed().filter(con1.or(con2).or(con3)).collect(toList());
        System.out.println("asdas = " + asdas);
    }
}

关于Java 8 流 - 或条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40551216/

相关文章:

java - liferay 服务构建器中的异常“:"java. lang.ClassCastException

c++ - 通用 lambda 在 C++14 中如何工作?

c# - 如何避免在 lambda 表达式中捕获变量?

java - 将 lambda 作为方法参数传递并排序映射

java - 拆分 java.util.stream.Stream

java - mySQL远程数据库无法连接

java - 动态根元素 JAXB?

java - 使用 Optional.ofNullable 替代三元运算符是一种好习惯吗?

java - 通过 AndroidfromJNI 另一个包加载静态 void C 函数

java - 在 JDK8 中导入 java.util.Arrays