ラムダ地図の比較にループ変換のためにネストされました

gravityBlast:

私は、ラムダ式に既存のforloopを変換するのに苦労しています。私は、オブジェクトのリストを(持っているList<Task>)「入力データ」(と呼ばれるマップが含まれていますMap<String, String>)。私はまた、別の持っているMap<String, String>(受け入れを)。

私はTask.InputData地図すべての「受け入れ」マップエントリを含んでいる場合、タスクのリストは、オブジェクトをフィルタリングします。Task.InputDataは、追加のエントリが含まれているかもしれませんが、私はTask.InputDataに存在している必要があります受け入れに存在するVARSを強制します。

そのようなループルックスのために、既存:

boolean addTask;
List<Task> finalResults = new ArrayList<>();
for (Task t : results) {
      addTask = true;
      for (Entry<String, String> k : kvVars.entrySet()) {                
            if (!t.getInputData().containsKey(k) || !t.getInputData().get(k).equals(k.getValue())) {
                  addTask = false;
            }
      }

      if (addTask) {
            finalResults.add(t);
      }
}

私は少し私がflatmapとフィルタ基準を組み合わせるためにしようとする必要があるかどうか、アプローチについて混乱したり、私がループの既存のロジックに従うべきである場合です。

デッドプール :

あなたは使用することができfilter、すべて収集するために、Task入力データで受け入れ、K 『/ V「すべて持っていることs』を

List<Task> finalResults = results.stream()
                                 .filter(t->kvVars.entrySet()
                                                  .stream()
                                      .allMatch(k->t.getInputData().containsKey(k.getKey()) 
                                                   && t.getInputData().get(k.getKey()).equals(k.getValue()))
                                 .collect(Collectors.toList());

おすすめ

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