gpt4 book ai didi

java - 如何对集合子集应用进一步的过滤器

转载 作者:行者123 更新时间:2023-12-02 05:46:50 25 4
gpt4 key购买 nike

我正在处理以下贸易对象列表

List<Trades> =
[Fund-A, Broker-A, 100]
[Fund-A, Broker-B, 200]
[Fund-B, Broker-A, 100]
[Fund-C, Broker-D, 300]

List<String> = funds basically (list contains unique values)
[Fund-A]
[Fund-B]

预期输出传递交易(列表)和资金(列表)

[Fund-A, Broker-A, 100]
[Fund-B, Broker-A, 100]

我可以对包含基金列表中任何基金的交易集合执行简单的过滤,如下所示

trades.stream().filter(x -> funds.contains(x.getfund())).collect(Collectors.toList())

但是这个输出

[Fund-A, Broker-A, 100]
[Fund-A, Broker-B, 200]
[Fund-B, Broker-A, 100]

但正在努力解决如何消除/排除此条目“[Fund-A,Broker-B,200]”,因为 Fund-B 在交易中没有针对 Broker-B 的条目。

其他信息感谢您分享评论。根据要求更清晰地分享,输出应该是基金中存在资金的任何交易 Set<String>并确定是否 [FUND-A, BROKER-A, 100]选择后,FUND-B 必须有一个条目 [FUND-B, BROKER-A, 100]

期望输出为

    [Fund-A, Broker-A, 100]
[Fund-B, Broker-A, 100]

[Fund-A, Broker-B, 200]排除

最佳答案

很少尝试取得预期结果,欢迎反馈以确定这是否是良好实践/有效方法

        List<EligibleBroker> possibleEligibles = trades.stream().filter(x -> funds.contains(x.getAcctCd()))
.collect(Collectors.groupingBy(TradeData::getBrokerCd))
.entrySet().stream().map(m -> {
EligibleBroker eligBrk = new EligibleBroker();
eligBrk.setBrokerCd(m.getKey());
eligBrk.setTarget(m.getValue().get(0).getTarget());
eligBrk.setAcctCd(m.getValue().stream().map(f -> f.getAcctCd()).collect(Collectors.toList()));
return eligBrk;
}).collect(Collectors.toList());

// TODO list equals requires fine tunning

List<EligibleBroker> eligibles = possibleEligibles.stream().filter(e -> e.getAcctCd().equals(funds)).collect(Collectors.toList());


哪里

public class EligibleBroker {
private List<String> acctCd;
private String brokerCd;
private double target;
....
}

关于java - 如何对集合子集应用进一步的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56085226/

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