Найти не похожие элементы из списка 2 массивов, имеющих разные размеры в Java - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть два списка массивов типа строки:

Список a -> [Манго, банан, яблоко]

Список б -> [Человек, яблоко]

Мне нужно найти не похожие элементы из двух списков.

Пока я не реализовал это:

List d = new ArrayList(a);
toReturn.removeAll(b);
return d;

Но проблема с этим кодом в том, что я не хочу, чтобы Mango, так как первый элемент из списка b содержит строку "Man". Я только хочу, чтобы "Банан" был возвращен.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Вы должны повторить один список и затем сравнить его в другом, удалить элемент, если он существует во втором списке (наоборот), ниже я делюсь примером кода для этого подхода.

public class Comp {

public static void main(String... strings) {

    List<String> lis1 = new ArrayList<>();
    lis1.add("applefy");
    lis1.add("boy");
    lis1.add("carrr");

    List<String> lis2 = new ArrayList<>();
    lis2.add("apple");
    lis2.add("car");

    List<String> result = new ArrayList<>();
    for (String a : lis1) {

        for (String b : lis2) {
            if (a.contains(b)) {
                result.add(a);
               }

        }

    }

    lis1.removeAll(result);

    System.out.println(lis1);

}

} вывод: [мальчик]

Надеюсь, это поможет.

0 голосов
/ 11 сентября 2018

Вы можете перебрать один список и найти в нем элементы, которые не являются подстроками другого, а затем, конечно, то же самое с обратными аргументами:

private static Stream<List> filterNonSimilar(List<String> a, List<String> b) {
    return a.stream()
            .filter(ai -> b.stream().noneMatch(bi -> ai.contains(bi) || bi.contains(ai));
}

public static List<String> nonSimilar(List<String> a, List<String> b) {
    return Stream.concat(filterNonSimilar(a, b), filterNonSimilar(b, a))
                 .collect(Collectors.toList());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...