¿Cómo comparar dos ArrayList y get lista1 con filtro utilizando flujos de java

sruthi:

Tengo dos listas lista1 y lista2 de tipo List

Term{
long sId;
int rowNum;
long psid;
String name;
}

List<Term> list1 = new ArrayList<>();
List<Term> list2 = new ArrayList<>();

Quiero devolver todos los elementos de lista1 donde (list1.psid! = List2.psid).

He intentado esto pero no su trabajo

public List<Term> getFilteredRowNum(List<Term> list1, List<Term> list2) {
        List<Long> psid = list2.stream().map(x -> x.getPsid()).collect(Collectors.toList());

        return list1.stream().filter(x -> !psid.contains(x.getPsid())).map(x -> x.getRowNum()+1).collect(Collectors.toList());

    }

Quiero obtener todos los registros de list1, que satisface la condición de barbecho si (list1.psid! = List2.psid)

Sample Date:
List1: rowNum     psId    name    sid
       1         1288     home    101
       1         9012     home    101
       2         1296     office  150
       3         1290     park    161

List2: rowNum     psId    name    sid
       1          9012    home    101
       2         1296     office  150
       3         1290     park    161

List1 psId not in list2 so I am expecting fallowing list as result from list1

Expected: List1
 rowNum     psId    name    sid
 1         1288     home    101
también:

Que busca un interior anyMatchen el predicado de filtro como:

public List<Term> getFilteredRowNum(List<Term> termList1, List<Term> termList2) {
    return termList1.stream()
            .filter(term1 -> termList2.stream()
                    .anyMatch(term2 -> term1.getSId() == term2.getSId()
                            && term1.getPsid() != term2.getPsid()))
            .collect(Collectors.toList());
}

Otra forma de resolver ese sería la creación de una Mapde siduna Setde las psids presentes en cualquiera de la lista utilizando groupingByymapping

Map<Long, Set<Long>> sIdToPsIdsMap = termList2.stream()
        .collect(Collectors.groupingBy(Term::getSId, 
                Collectors.mapping(Term::getPsid, Collectors.toSet())));

y además de usarla para filtercondiciones como

return termList1.stream()
        .filter(term1 -> sIdToPsIdsMap.containsKey(term1.getSId())
                && !sIdToPsIdsMap.get(term1.getSId()).contains(term1.getPsid()))
        .collect(Collectors.toList());

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=230486&siteId=1
Recomendado
Clasificación