当前位置: 首页 > 知识库问答 >
问题:

Java 8流或条件

缪兴腾
2023-03-14

看看这段代码:(这是工作代码,但我不喜欢使用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中使用或()条件来从列表中删除两个特定元素,因为这会给我带来编译时错误(在IDE中),我最终使用了上面的两个过滤器。我会错过什么?

items = Arrays.stream(items).filter(x -> !x.getName().equalsIgnoreCase("acl1") ||
        x -> !x.getName().equalsIgnoreCase("acl2")).toArray(ItemDetails[]::new);
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);
    }

共有1个答案

钦德佑
2023-03-14

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

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);
    }
}
 类似资料:
  • 我正在尝试根据买入或卖出方向对股票订单列表进行排序。 我试过这样的方法: 我看到下面的错误消息,我不清楚。 不兼容的类型。必需的int,但已将“comparing”推断给Comparator:不存在类型变量T,U的实例,因此Comparator符合Integer。

  • 有时您希望筛选具有多个条件的: 也可以使用复杂条件和单个: 第一种方法在可读性方面胜出,但在性能方面,什么更好呢?

  • 我试图翻译这个(简化)代码使用Java-8流: 以下是我尝试过的: 但以上给出了所有

  • 正如这篇stackoverflow文章中所述,在调用终端操作之前,不会实际应用筛选器。既然我在调用终端操作之前重新分配了stream的值,那么上面的代码是否仍然是使用Java8流的适当方法呢?

  • 1 Java8 Stream流式编程的介绍 Java在Java 8中提供了一个新的附加程序包,称为java.util.stream。该软件包由类,接口和枚举组成,以允许对元素进行功能样式的操作。您可以通过导入java.util.stream包来使用流。 Stream提供以下功能: 流不存储元素。它只是通过计算操作的流水线从数据结构,数组或I/O通道等源中传递元素。 流本质上是功能性的。对流执行的操

  • 使用以下代码,我得到以下编译错误。我还尝试使用输入作为整数列表,而不是int[],这样做效果很好。如果我使用box(),它也可以正常工作。 我的问题真的是如果Int Stream必须是整数流,以及如何处理错误消息“lambda表达式int[]中的错误返回类型无法转换为int” 错误:(13,49)java:不兼容的类型: lambda表达式int[]中的错误返回类型无法转换为int错误:(13,6