別の `List`に基づいてフィルター` List`

アレックス:

私は別のリストに基づいてリストをフィルタリングするには、以下の機能を使用しています。たとえば、次のようにprogramLines [1, 2, 4, 5, 5, 6, 6, 7, 7, 9, 13]とライン[9, 10, 13, 14]この出力に[9, 13]> -しかし、私は、この出力にそれを変更したい[9,0,13,0]値を持つ塗りつぶしアウト残りの要素に他の言葉で0

public List<Integer> filter(List<Integer> lines, List<Integer> programLines)              
            List<Integer> listOutput =
                lines.stream().filter(programLines::contains).collect(Collectors.toList());
            return listOutput;
          }
彼らは次のとおりでした:

使用するmap代わりにfilter

public List<Integer> filter(List<Integer> lines, List<Integer> programLines)              
    List<Integer> listOutput =
        lines.stream()
             .map(i -> programLines.contains(i) ? i : 0)
             .collect(Collectors.toList());
    return listOutput;
}

場合はprogramLines大きいです、それを変換するために有用である可能性がSetより高いパフォーマンスのために:

public List<Integer> filter(List<Integer> lines, List<Integer> programLines)              
    Set<Integer> filter = new HashSet<>(programLines);
    List<Integer> listOutput =
        lines.stream()
             .map(i -> filter.contains(i) ? i : 0)
             .collect(Collectors.toList());
    return listOutput;
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=318456&siteId=1