Как использовать поток на карте в 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