gpt4 book ai didi

java - 如何在 Java 中为嵌套列表编写流

转载 作者:行者123 更新时间:2023-11-30 06:55:00 24 4
gpt4 key购买 nike

我想获取主要交易中颜色与给定值匹配的所有交易选项。如何编写流查询以仅获取那些颜色与我的值列表中的颜色相同的交易选项?

我什么时候应该使用 anyMatch 以及为什么我不能对内部流使用过滤器?

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);

ArrayList<String> values = new ArrayList<String>();
values.add("red");
values.add("blue");

List<Deal> output
= dl.stream()
.filter(d -> d.getDealop().stream().anyMatch(po -> values.stream().anyMatch(v -> v.equals(po.getColor()))))
.collect(Collectors.toList());

System.out.println(output.size());

}
}

最佳答案

在您的情况下,您希望从每笔交易中删除其颜色不在指定颜色列表中的所有交易选项。您可以遍历交易并使用 removeIf 删除具有不需要颜色的交易选项。

Set<String> values = new HashSet<String>();
values.add("red");
values.add("blue");

List<Deal> output =
dl.stream()
.map(d -> {
d.getDealop().removeIf(o -> !values.contains(o.color));
return d;
})
.collect(Collectors.toList());

或者,就地:

dl.forEach(d -> d.getDealop().removeIf(o -> !values.contains(o.color)));

关于java - 如何在 Java 中为嵌套列表编写流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35840426/

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