gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:00 26 4
gpt4 key购买 nike

我正在尝试过滤我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com