首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对集合子集应用进一步的筛选器

如何对集合子集应用进一步的筛选器
EN

Stack Overflow用户
提问于 2019-05-10 21:48:55
回答 1查看 62关注 0票数 0

我正在做下面的交易对象清单。

代码语言:javascript
复制
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] 

预期产出通过交易(列表)和基金(列表)

代码语言:javascript
复制
[Fund-A, Broker-A, 100]
[Fund-B, Broker-A, 100]   

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

代码语言:javascript
复制
trades.stream().filter(x -> funds.contains(x.getfund())).collect(Collectors.toList())

但是这个输出

代码语言:javascript
复制
[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] )输入一个条目。

期望输出为

代码语言:javascript
复制
    [Fund-A, Broker-A, 100]
    [Fund-B, Broker-A, 100]   

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

EN

回答 1

Stack Overflow用户

发布于 2019-05-11 11:31:43

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

代码语言:javascript
复制
        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());

哪里

代码语言:javascript
复制
public class EligibleBroker {
    private List<String> acctCd;
    private String brokerCd;
    private double target;
....
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56085226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档