Я написал этот фрагмент кода, чтобы проверить, что список строк полностью содержится в другом, и в этом случае удалить список.Проверка списка строк, полностью содержащихся в другом списке строк
public static void main(String[] args) {
LinkedList<String> l1 = new LinkedList<String>();
LinkedList<String> l2 = new LinkedList<String>();
l1.add("Cc");
l1.add("Dd");
l2.add("Cc");
l2.add("Dd");
l2.add("Ee");
LinkedList<LinkedList<String>> l = new LinkedList<LinkedList<String>>();
l.add(l1);
l.add(l2);
System.out.println("OUTPUT: " + filterSublist(l));
}
static List<LinkedList<String>> filterSublist(LinkedList<LinkedList<String>> l) {
List<LinkedList<String>> uniq = new LinkedList<LinkedList<String>>(l);
l.forEach(elem -> uniq.removeIf(x -> !x.equals(elem) && elem.contains(x)));
return uniq;
}
Функция filterSubList должна возвращать список список строк, который не имеет списков, которые полностью содержатся в других списках. В примере мы имеем:
- Список 1: "Cc, Dd"
- Список 2: "Cc, Dd, Ee"
Поскольку список 1 целиком содержится в списке 2, функция должна возвращать список списков, который содержит только список 2. Но когда я запускаю программу, которую я получил вывод, который представляет собой список, который содержит как:
OUTPUT: [[Cc, Dd], [Cc, Dd, Ee]]
Это неправильно. Есть ли ошибка в функции filterSubList?
Есть ли причина не использовать метод 'equals()' для проверки ** равенства ** двух «списков»? –
Я не знаю, есть ли лучший способ. Что ты предлагаешь? –
Ну, вы можете использовать метод 'equals()', который бы возвращал 'true', если два сравниваемых списка равны. Для примера 'System.out.println (list1.equals (list2))'. Но обратите внимание, что порядок содержания имеет значение. Если вам не нужен заказ, вы можете использовать 'HashSet' @Walrider –