我正在处理以下交易对象列表
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-B在交易中没有针对Broker-B的条目,因此正在努力消除/排除此条目[[Fund-A,Broker-B,200]”。
其他信息
感谢您分享评论。根据要求,为了更加清晰起见,输出应该是资金Set<String>
中存在资金的任何交易,并且还要确保如果选择[FUND-A, BROKER-A, 100]
,FUND-B的条目必须为[FUND-B, BROKER-A, 100]
< / p>
期望输出为
[Fund-A, Broker-A, 100]
[Fund-B, Broker-A, 100]
已排除[Fund-A, Broker-B, 200]
答案 0 :(得分:0)
极少尝试能取得预期的结果,欢迎反馈以确定这是否是好的做法/有效方法
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;
....
}