セットの値に基づいて、リスト内の値のフィルタリング

marti6addams:

私は、次の問題を解決するには、Java 8を使用しようとしています。私は、次の(していると言うABカスタムクラスです)

ArrayList<A> skills;
HashSet<B> workCenters;

私は何をする必要があると、値かどうかを見つけることですa.getDepartment()されてStringも、中に含まれてBいるにも方法がありますString getDepartment()し、新しいにそれらを収集しますList<A>

私はそのような試みました:

 List<A> collect = skills.stream()
     .filter(s -> workCenters.contains(s.getDepartment())
     .collect(Collectors.toList());

私は取得できませんでしたので、この場合には、私は右のそれをしないgetDepartment()からworkCenters正しい解決策は何でしょうか?

ernest_k:

あなたは、変換して始めることができHashSet<B>HashSet<String>して、あなたのコードを使用します。

Set<String> bDeps = workCenters.stream()
                               .map(B::getDepartment)
                               .collect(Collectors.toSet());

List<A> collect = skills.stream()
                         .filter(s -> bDeps.contains(s.getDepartment()))
                         .collect(Collectors.toList());

おすすめ

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