【问题标题】:Java 8 Array Stream FilterJava 8 数组流过滤器
【发布时间】:2019-03-10 04:53:18
【问题描述】:

我有一个带有自定义对象的简单数组,并希望使用 java 8 流进行过滤。

    A[] aArray = new A[3];

    A a1 = new A();
    a1.setaId(1);
    a1.setaName("AName1");

    B b1 = new B();
    b1.setbId(1);
    b1.setbName("BName1");

    a1.setB(b1);
    aArray[0] = a1;

    A a2 = new A();
    a2.setaId(2);
    a2.setaName("AName2");

    B b2 = new B();
    b2.setbId(2);
    b2.setbName("BName2");

    a2.setB(b2);
    aArray[1] = a2;

您能否建议我如何在数组 NOT ON arrayList 上进行过滤器流

基本上我只想用“BName2”值过滤。

【问题讨论】:

  • 您的数组大小应为 2。因此应将声明更改为:A[] aArray = new A[2];
  • 顺便给自己定义一些好的构造函数,这样你就可以做A[] aArray = new A[] { new A(1, "AName1", new B(1, "BName1")), new A(2, "AName2", new B(2, "BName2")), null };

标签: java filter java-8 java-stream


【解决方案1】:

如果您在数组中存储唯一元素,那么您可以使用以下方法

如果对象是唯一的

A aWithValidString = Arrays.stream(aArray)
    .filter(a -> "BName2".equals(a.getB().getbName()))
    .finAny().orElse(null);

如果数组中有多个带有“Bname2”字符串的对象,您可以使用下面的代码

List<A> filteredObject = Arrays.stream(aArray)
    .filter(a -> "BName2".equals(a.getB().getbName()))
    .collect(Collectors.toList());

然后迭代列表

【讨论】:

  • 调用Optional.get 总是一个错误。
  • @BoristheSpider 已更正,谢谢 :)
  • .orElse(null) 总是让我沮丧... 有了Optional,你为什么还要使用null?您可以只返回 Optional 以及所有这些 - 将其映射为 null 没有意义
猜你喜欢
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 2018-08-08
相关资源
最近更新 更多