Удалить элемент из набора Java 8 - PullRequest
0 голосов
/ 27 марта 2019
static final List<String> allowedType = asList(type1,type2);

Set<String> set1 = serviceClass.getType()
                               .stream()
                               .filter(type -> allowedType.contains(type))
                               .collect(toSet());

Требование состоит из двух частей,

часть1.если типы, полученные из serviceClass, имеют какой-либо тип службы, упомянутый в allowType, добавьте его в set1.

part 2. После описанной выше операции мне нужно проверить, содержит ли set1 оба типа, если да, одинТип должен быть удален.

Часть 1 проста, на данный момент я реализовал часть 2, используя

if (set1.contains("type1" && set1.contains("typep2") {
    set1.remove("type");
}

В любом случае части 1 и 2 могут быть объединены в одну операцию?

Спасибо,

1 Ответ

1 голос
/ 28 марта 2019

Если всегда есть два типа и вы всегда можете сохранить не более одного из них, вы можете использовать limit:

    Set<String> set1 = serviceClass.getType()
           .stream()
           .filter(type -> allowedType.contains(type))
           .limit(1)
           .collect(toSet());

limit(1) вернет поток из 1 элемента, если хотя бы одинэлемент проходит фильтр, в противном случае пустой поток.Мне кажется, что это даст вам то, о чем вы просили (не тестировали).

...