我正在做下面的交易对象清单。
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] 但是,在如何消除/排除这一项“基金-A,经纪人-B,200”作为基金-B在交易中没有针对经纪人-B的分录的问题上挣扎着。
附加信息谢谢分享评论。根据要求,产出应该是基金Set<String>中存在的基金的任何交易,并确保如果选择[FUND-A, BROKER-A, 100],则必须为基金-B(即[FUND-B, BROKER-A, 100] )输入一个条目。
期望输出为
[Fund-A, Broker-A, 100]
[Fund-B, Broker-A, 100] 排除[Fund-A, Broker-B, 200]
发布于 2019-05-11 11:31:43
由于很少尝试取得预期的结果,欢迎反馈,以确定这是否是良好做法/有效方法。
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;
....
}https://stackoverflow.com/questions/56085226
复制相似问题