比较2个大小不同的arraylist并将不相等的值放在另一个数组中

时间:2019-01-22 08:42:43

标签: java arraylist

我有2个arraylist

ArrayList<String> listdes = new ArrayList<String>();
ArrayList<String> listmet = new ArrayList<String>();

listdes包含22个元素:

[getCostruttore/{code}, searchZona/{codice : .+}/{descri : .+}, searchAgent/{codcon : .+}/{descra : .+}, getZona/{code}, searchArticolo/{codint : .+}/{coarfo : .+}/{descri : .+}, getCustomer/{code : .+}, searchPayment/{pagame}/{despag : .+}, getPayment/{code}, getGruppo/{sigcos}/{codgru}, getSottoGruppo/{sigcos : .+}/{codgru : .+}/{codsgr : .+}, getCustomers, searchGruppo/{sigcos : .+}/{codgru : .+}/{desgru : .+}, getAgent/{code : .+}, getArticolo/{codint : .+}/{coarfo : .+}, getFido/{client : .+}/{dataat : .+}/{datafi : .+}, searchStructureAgent/{codice}/{descri : .+}, getStructureAgent/{code}, getFidoClienteOasi/{client : .+}, searchSottoGruppo/{sigcos : .+}/{codgru : .+}/{codsgr : .+}/{dessgr : .+}, getArboAnagrafica/{codice : .+}, searchCostruttore/{sigcos : .+}/{dessig : .+}, searchCondizioniBancarieClienteOasi/{client : .+}]

而listmet包含20个元素:

[getCostruttore, searchZona, searchAgent, getZona, searchArticolo, getCustomer, searchPayment, getPayment, getGruppo, getSottoGruppo, getCustomers, searchGruppo, getAgent, getArticolo, getFido, searchStructureAgent, getStructureAgent, getFidoClienteOasi, searchSottoGruppo, getArboAnagrafica]

我想进行比较(如果可能的话,可以使用一个contains运算符),并将不相同的tha值放在另一个arraylist中。

我尝试使用Hashset,但是它不起作用..这里的代码

for(int i =0;i<listdes.size();i++)
            {
                if(listdes.get(i).equals(listmet.get(i)))
                {

                }
                else
                {
                    //put on another arraylist
                }
            }

对数组进行排序..我想要的结果是

arraylist:[{searchCostruttore,searchCondizioniBancarieClienteOasi}]

剩余的输出列表:

[searchStructureAgent/{codice}/{descri : .+}, getStructureAgent/{code}, getCustomer/{code : .+}, getZona/{code}, getCostruttore/{code}, searchGruppo/{sigcos : .+}/{codgru : .+}/{desgru : .+}, searchPayment/{pagame}/{despag : .+}, searchZona/{codice : .+}/{descri : .+}, searchAgent/{codcon : .+}/{descra : .+}, getPayment/{code}, getAgent/{code : .+}, searchCondizioniBancarieClienteOasi/{client : .+}, searchCostruttore/{sigcos : .+}/{dessig : .+}, searchSottoGruppo/{sigcos : .+}/{codgru : .+}/{codsgr : .+}/{dessgr : .+}, getArboAnagrafica/{codice : .+}, getFidoClienteOasi/{client : .+}, getFido/{client : .+}/{dataat : .+}/{datafi : .+}, searchArticolo/{codint : .+}/{coarfo : .+}/{descri : .+}, getSottoGruppo/{sigcos : .+}/{codgru : .+}/{codsgr : .+}, getGruppo/{sigcos}/{codgru}, getArticolo/{codint : .+}/{coarfo : .+}]

它返回一个包含21个元素的数组

1 个答案:

答案 0 :(得分:0)

ArrayList<String> listdes = new ArrayList<String>();
ArrayList<String> listmet = new ArrayList<String>();
ArrayList<String> similar = new ArrayList<String>();
listdes.forEach(des -> {
    Optional<String> opt = listmet.stream().filter(met -> des.contains(met)).findFirst();
    if (opt.isPresent()) {
        similar.add(opt.get());
    }
});
List<String> leftover = listmet.stream().filter(met -> !similar.contains(met)).collect(Collectors.toList());