Java 8 - Фильтр Примеры карт
Несколько примеров Java, чтобы показать вам, как фильтроватьMap
с помощью API потока Java 8.
До Java 8:
Mapmap = new HashMap<>(); map.put(1, "linode.com"); map.put(2, "heroku.com"); String result = ""; for (Map.Entry entry : map.entrySet()) { if("something".equals(entry.getValue())){ result = entry.getValue(); } }
В Java 8 вы можете преобразоватьMap.entrySet()
вstream
, за которым следуютfilter()
иcollect()
.
Mapmap = new HashMap<>(); map.put(1, "linode.com"); map.put(2, "heroku.com"); //Map -> Stream -> Filter -> String String result = map.entrySet().stream() .filter(x -> "something".equals(x.getValue())) .map(x->x.getValue()) .collect(Collectors.joining()); //Map -> Stream -> Filter -> MAP Map collect = map.entrySet().stream() .filter(x -> x.getKey() == 2) .collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue())); // or like this Map collect = map.entrySet().stream() .filter(x -> x.getKey() == 3) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
1. Java 8 - фильтрация карты
Полный пример фильтрации карты по значениям и возврата строки.
TestMapFilter.java
package com.example; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; public class TestMapFilter { public static void main(String[] args) { MapHOSTING = new HashMap<>(); HOSTING.put(1, "linode.com"); HOSTING.put(2, "heroku.com"); HOSTING.put(3, "digitalocean.com"); HOSTING.put(4, "aws.amazon.com"); // Before Java 8 String result = ""; for (Map.Entry entry : HOSTING.entrySet()) { if ("aws.amazon.com".equals(entry.getValue())) { result = entry.getValue(); } } System.out.println("Before Java 8 : " + result); //Map -> Stream -> Filter -> String result = HOSTING.entrySet().stream() .filter(map -> "aws.amazon.com".equals(map.getValue())) .map(map -> map.getValue()) .collect(Collectors.joining()); System.out.println("With Java 8 : " + result); // filter more values result = HOSTING.entrySet().stream() .filter(x -> { if (!x.getValue().contains("amazon") && !x.getValue().contains("digital")) { return true; } return false; }) .map(map -> map.getValue()) .collect(Collectors.joining(",")); System.out.println("With Java 8 : " + result); } }
Выход
Before Java 8 : aws.amazon.com With Java 8 : aws.amazon.com With Java 8 : linode.com,heroku.com
2. Java 8 - Фильтр карты № 2
Еще один пример фильтрацииMap
по ключу, но на этот раз вернетMap
TestMapFilter2.java
package com.example; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; public class TestMapFilter2 { public static void main(String[] args) { MapHOSTING = new HashMap<>(); HOSTING.put(1, "linode.com"); HOSTING.put(2, "heroku.com"); HOSTING.put(3, "digitalocean.com"); HOSTING.put(4, "aws.amazon.com"); //Map -> Stream -> Filter -> Map Map collect = HOSTING.entrySet().stream() .filter(map -> map.getKey() == 2) .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue())); System.out.println(collect); //output : {2=heroku.com} Map collect2 = HOSTING.entrySet().stream() .filter(map -> map.getKey() <= 3) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); System.out.println(collect2); //output : {1=linode.com, 2=heroku.com, 3=digitalocean.com} } }
Выход
{2=heroku.com} {1=linode.com, 2=heroku.com, 3=digitalocean.com}
3. Java 8 - Фильтр карты № 3 - Предикат
На этот раз попробуйте новую Java 8Predicate
TestMapFilter3.java
package com.example; import java.util.HashMap; import java.util.Map; import java.util.function.Predicate; import java.util.stream.Collectors; public class TestMapFilter3 { // Generic Map filterbyvalue, with predicate public staticMap filterByValue(Map map, Predicate predicate) { return map.entrySet() .stream() .filter(x -> predicate.test(x.getValue())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } public static void main(String[] args) { Map HOSTING = new HashMap<>(); HOSTING.put(1, "linode.com"); HOSTING.put(2, "heroku.com"); HOSTING.put(3, "digitalocean.com"); HOSTING.put(4, "aws.amazon.com"); HOSTING.put(5, "aws2.amazon.com"); // {1=linode.com} Map filteredMap = filterByValue(HOSTING, x -> x.contains("linode")); System.out.println(filteredMap); // {1=linode.com, 4=aws.amazon.com, 5=aws2.amazon.com} Map filteredMap2 = filterByValue(HOSTING, x -> (x.contains("aws") || x.contains("linode"))); System.out.println(filteredMap2); // {4=aws.amazon.com} Map filteredMap3 = filterByValue(HOSTING, x -> (x.contains("aws") && !x.contains("aws2"))); System.out.println(filteredMap3); // {1=linode.com, 2=heroku.com} Map filteredMap4 = filterByValue(HOSTING, x -> (x.length() <= 10)); System.out.println(filteredMap4); } }
Выход
{1=linode.com} {1=linode.com, 4=aws.amazon.com, 5=aws2.amazon.com} {4=aws.amazon.com} {1=linode.com, 2=heroku.com}