Как найти, если все элементы списка находятся в наборе в Java 8? - PullRequest
0 голосов
/ 18 мая 2018

Хотя это легко сделать в цикле for, в Java-8 есть способ найти, присутствуют ли все элементы в списке L в Set s?

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Вы можете использовать allMatch:

boolean result = l.stream().allMatch(s::contains);
0 голосов
/ 18 мая 2018

Нет необходимости использовать Stream для этого, когда вы можете использовать Set#containsAll:

var set = Set.of(1, 2, 3, 4, 5);
var list = List.of(2, 3, 4);

System.out.println(set.containsAll(list));

Выход:

true
0 голосов
/ 18 мая 2018

Да.

long commonElements = l.stream().filter(s::contains).count();
if (commonElements == l.size()) {
    //do something
}

Наборы хороши тем, что они созданы именно для такого рода вещей: проверка, существует ли уже элемент.Списки не так хороши в этой практике, но хороши для быстрого обхода.Итак, вы хотите пройтись по списку и сравнить каждый элемент с набором, а не наоборот.

Потоки - это хороший ресурс для выполнения операций внутри строки, а не для явного прерывания.

РЕДАКТИРОВАТЬ: ответ @Aomine лучше, чем мой

boolean result = myList.stream().allMatch(mySet::contains);
...