Java Использование нескольких предикатов для anyMatch - PullRequest
0 голосов
/ 01 октября 2018

У меня List HashMap, т. Е. List<Map<String, Object>> result.Я хочу проверить, присутствует ли какое-либо значение ключа в этом списке или нет.

Например:

Name      Count 
Marvel    10
DC         0  

Я хочу, чтобы в моем списке карт была хотя бы одна запись для вышеуказанногоДля этого я использую таблицу anyMatch

Assert.assertTrue(
result.stream().anyMatch(
ag -> ( "Marvel".equals(ag.get("Name")) &&  10==(int)ag.get("Count"))
));

Как использовать несколько предикатов?У меня может быть список 1000 HashMap, я просто хочу проверить, содержат ли какие-нибудь две Hash-карты из моего списка эти две записи.

1 Ответ

0 голосов
/ 01 октября 2018

Ваша структура данных кажется неправильной для начала.A List<Map<String, Object>>, где каждая карта представляет строку и имеет только один ключ и одно значение?Вам просто нужно Map<String, Integer>.Строка - это имя, целое число - это количество.Не забудьте дать ему осмысленное имя, например, comicUniverseToSuperheroFrequency.

С учетом сказанного, Predicate имеет and метод , который можно использовать для объединения условий.Это может выглядеть примерно так:

public static void main(String[] args)
{
    Map<String, Integer> comicUniverseToSuperheroFrequency = /*something*/;

    boolean isMarvelCountTen = comicUniverseToSuperheroFrequency.entrySet().stream()
        .anyMatch(row -> isMarvel().and(isTen()).test(row));
}

private static Predicate<Map.Entry<String, Integer>> isMarvel()
{
    return row -> "Marvel".equals(row.getKey());
}

private static Predicate<Map.Entry<String, Integer>> isTen()
{
    return row -> row.getValue() == 10;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...