Java 8 - Filtrer des exemples de carte
Quelques exemples Java pour vous montrer comment filtrer unMap avec l'API de flux Java 8.
Avant 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(); } }
Avec Java 8, vous pouvez convertir unMap.entrySet() en unstream, suivi d'unfilter() et d'uncollect() it.
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 - Filtrer une carte
Un exemple complet pour filtrer une carte par valeurs et renvoyer une chaîne.
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) {
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");
// 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);
}
}
Sortie
Before Java 8 : aws.amazon.com With Java 8 : aws.amazon.com With Java 8 : linode.com,heroku.com
2. Java 8 - Filtrer une carte # 2
Encore un autre exemple pour filtrer unMap par clé, mais cette fois retournera unMap
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) {
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");
//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}
}
}
Sortie
{2=heroku.com}
{1=linode.com, 2=heroku.com, 3=digitalocean.com}
3. Java 8 - Filtrer une carte # 3 - Prédicat
Cette fois, essayez les nouveaux 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 static Map 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);
}
}
Sortie
{1=linode.com}
{1=linode.com, 4=aws.amazon.com, 5=aws2.amazon.com}
{4=aws.amazon.com}
{1=linode.com, 2=heroku.com}