java - 如何使用 lambda 产品过滤 Java 8 中的嵌套流

标签 java lambda java-8

我正在尝试过滤我的 Deals基于我的 Deal选项,但是当我尝试过滤代码时,出现类型不匹配错误 Set<DealOptions>不能转换为 boolean 值。当所有交易选项都是红色时,我想保留交易。

这是我的代码:

import java.util.*;
import java.util.stream.Collectors;

class Deal {
    String dealname;
    String dealprice;
    Set<DealOptions> dealop;

    public String getDealname() {
        return dealname;
    }

    public void setDealname(String dealname) {
        this.dealname = dealname;
    }

    public String getDealprice() {
        return dealprice;
    }

    public void setDealprice(String dealprice) {
        this.dealprice = dealprice;
    }

    public Set<DealOptions> getDealop() {
        return dealop;
    }

    public void setDealop(Set<DealOptions> dealop) {
        this.dealop = dealop;
    }

}

class DealOptions {
    String optname;
    String color;

    public String getOptname() {
        return optname;
    }

    public void setOptname(String optname) {
        this.optname = optname;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

}

public class Test {

    public static void main(String[] args) 
             {

        Deal s = new Deal();
        Set<DealOptions> ops = new HashSet<DealOptions>();
        DealOptions op = new DealOptions();
        s.setDealname("mongo");
        s.setDealprice("500");

        op = new DealOptions();
        op.setColor("red");
        op.setOptname("redop");

        ops.add(op);
        op = new DealOptions();
        op.setColor("blue");
        op.setOptname("blueop");

        ops.add(op);
        op = new DealOptions();
        op.setColor("green");
        op.setOptname("greenop");

        ops.add(op);

        s.setDealop(ops);

        List<Deal> dl = new ArrayList<Deal>();

        dl.add(s);
        ops = new HashSet<DealOptions>();
        s = new Deal();
        op = new DealOptions();
        s.setDealname("test2");
        s.setDealprice("200");

        op = new DealOptions();
        op.setColor("indigo");
        op.setOptname("indigop");

        ops.add(op);
        op = new DealOptions();
        op.setColor("violet");
        op.setOptname("violetop");

        ops.add(op);
        op = new DealOptions();
        op.setColor("orange");
        op.setOptname("orangeop");

        ops.add(op);

        s.setDealop(ops);

        dl.add(s);

        List<Deal> dev = dl.stream().filter(
                (p) -> p.getDealop().stream().filter((po) -> po.getColor().equals("red")).collect(Collectors.toSet()))
                .collect(Collectors.toList()); // error here

    }
}

错误:

Cannot convert from Set to boolean

如何纠正此错误,如何根据我的交易选项过滤我的交易?

最佳答案

您可以使用 allMatch(predicate)确定一个期权的所有交易是否都是红色的:

Returns whether all elements of this stream match the provided predicate.

在这种情况下,谓词只是告诉选项是否为红色。

List<Deal> output =
    dl.stream()
      .filter(d -> d.getDealop().stream().allMatch(po -> po.getColor().equals("red")))
      .collect(Collectors.toList());

关于java - 如何使用 lambda 产品过滤 Java 8 中的嵌套流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35746877/

相关文章:

java - 查找已排序的一维数组中元素的最近/最接近的较低值

java - 使用 Java lambda 的外部可配置过滤

java - 在 Java 中,Integer 对象是否应该优先于 int primitive(对于其他数字类型也是如此)?

c++ - 将不可复制的闭包对象传递给 std::function 参数

c# - 在 C# 中遍历树的递归 lambda 表达式

generics - 为什么编译器给我这不能从 CompletableFuture<Object> 转换为 CompletableFuture<String>

java - Java 8 Stream API 表示的嵌套 for 循环

java - Apache HTTP 客户端 socks 代理

java - java中使用Selenium自动上传图像到instagram

c++ - Lambda 隐式捕获因从结构化绑定(bind)声明的变量而失败