Javaの8つのストリーム - 二つのリストを比較することによって、フィルタ

何:

私は、互いに異なる2つのリストを持っています

public class App1{
    private String name;
    private String city;

    // getter setter

    // constructors
}

public class App2{
    private String differentName;
    private String differentCity;
    private String someProperty1;
    private String someProperty2;

    // getter setter

    // constructors
}

List<App1> app1List = new ArrayList<>();
app1List.add(new App1("test1","city1"));
app1List.add(new App1("test2","city2"));
app1List.add(new App1("test3","city3"));
app1List.add(new App1("test4","city4"));

List<App2> app2List = new ArrayList<>();
app2List.add(new App2("test2","city2"));
app2List.add(new App2("test3","city3"));

あなたはApp1の&App2のクラスを見るとわかるように異なるプロパティ名を持つ2つの異なるPOJOのある、名前、都市&differentName、differentCityプロパティで開催されていますが、コンテンツ/値は、それぞれ同じすなわちtest1の、TEST2、TEST3&CITY1、City2この式などであります

今、私は存在しませんapp2Listすなわち、他のリストの名前&都市を比較app1Listをフィルタリングする必要があります。

最終的な出力は次のようになり

app1List.add(new App1("test1","city1"));
app1List.add(new App1("test4","city4"));

最も簡単な方法は、私は避けるようにしようとしている他のリストの複数の時間のループ1にあります。ループに複数回を持たずにJavaの8ストリームのいずれかの方法はあります?

また:

あなたは使用することができますnoneMatchなどの操作を、:

List<App1> result = app1List.stream()
        .filter(app1 -> app2List.stream()
                .noneMatch(app2 -> app2.getDifferentCity().equals(app1.getCity()) &&
                        app2.getDifferentName().equals(app1.getName())))
        .collect(Collectors.toList());

これは、両方の組み合わせを想定しているnamecityしながら、一致しているfilterINGの。

おすすめ

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