Как использовать поток на карте в Java 8

Java

Как использовать поток на карте в Java 8

Введение

Map — очень часто используемый тип коллекции в Java. Обычно нам нужно пройти Map, чтобы получить некоторые значения. Java 8 представила концепцию Stream, так как же мы можем использовать Stream в Map?

Основные понятия

Карта имеет ключ, значение и запись, представляющую весь ключ и значение.

Создать карту:

Map<String, String> someMap = new HashMap<>();

Получите набор записей карты:

Set<Map.Entry<String, String>> entries = someMap.entrySet();

Получите ключ карты:

Set<String> keySet = someMap.keySet();

Получить значение карты:

Collection<String> values = someMap.values();

Выше мы видим, что есть несколько коллекций: Map, Set, Collection.

За исключением карты, у которой нет потока, у двух других есть методы потока:

Stream<Map.Entry<String, String>> entriesStream = entries.stream();
        Stream<String> valuesStream = values.stream();
        Stream<String> keysStream = keySet.stream();

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

Используйте Stream, чтобы получить ключ карты

Давайте сначала добавим несколько значений на карту:

someMap.put("jack","20");
someMap.put("bill","35");

Выше мы добавили поля имени и возраста.

Если мы хотим найти ключ с age=20, мы можем сделать это так:

Optional<String> optionalName = someMap.entrySet().stream()
                .filter(e -> "20".equals(e.getValue()))
                .map(Map.Entry::getKey)
                .findFirst();

        log.info(optionalName.get());

Поскольку возвращаемое значение является необязательным, если значение не существует, мы также можем обработать:

optionalName = someMap.entrySet().stream()
                .filter(e -> "Non ages".equals(e.getValue()))
                .map(Map.Entry::getKey).findFirst();

        log.info("{}",optionalName.isPresent());

В приведенном выше примере мы определяем, существует ли возраст, вызывая метод isPresent.

Если значений несколько, мы можем написать:

someMap.put("alice","20");
        List<String> listnames = someMap.entrySet().stream()
                .filter(e -> e.getValue().equals("20"))
                .map(Map.Entry::getKey)
                .collect(Collectors.toList());

        log.info("{}",listnames);

Выше мы вызвали collect(Collectors.toList()) для преобразования значения в список.

Используйте поток, чтобы получить значение карты

Ключ карты мы получили выше, также можем получить значение карты:

List<String> listAges = someMap.entrySet().stream()
                .filter(e -> e.getKey().equals("alice"))
                .map(Map.Entry::getValue)
                .collect(Collectors.toList());

        log.info("{}",listAges);

Выше мы сопоставляем значение ключа со значением alice.

Суммировать

Stream — очень мощная функция, комбинируя ее с картой, мы можем более легко управлять объектами карты.

Примеры этой статьиGitHub.com/Dadean2009/приходите…

Добро пожаловать, обратите внимание на мой публичный номер: вас ждут самые интересные вещи о программе! Для получения дополнительной информации, пожалуйста, посетитеwww.flydean.com