使用聚合替换嵌套的for循环

时间:2015-11-03 06:01:28

标签: java for-loop nested-loops aggregation

    for (Sample i : DATA) {
        for(Sample ii : DATA){

            if(i.getID() == ii.getID()){
                // Do nothing.
            }else {
                i.addMatch(new Match(ii.getID()));
            }
        }
    }

我有List<Sample>,每个Sample都包含List<Match>List<Match>Samples与另一个Sample匹配的集合。因此,List<Match>包含所有原始样本减去与之比较的样本。

Q1:汇总操作在这里有用吗?如果没有,我怎么知道他们什么时候?

Q2:如果是,那么编写它的适当方法是什么?

编辑: Java lesson on Aggregate Operations.

1 个答案:

答案 0 :(得分:1)

  

Q1 :聚合操作在这里有用吗?如果没有,我怎么知道他们什么时候?

它们在您的情况下部分有用。如果你想迭代Collection,最好使用老式的foreach循环,因为它没有创建Stream管道的开销。但是你的内循环非常适合Stream处理,因为你过滤并映射每个元素。

  

Q2 :如果是,那么编写它的适当方法是什么?

for (Sample sample : DATA) {
    DATA.stream()
       .mapToInt(Sample::getId).filter(id -> id != sample.getId()).mapToObj(Match::new)
       .forEach(m -> sample.addMatch(m));
}