博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 8 – Filter a Map examples
阅读量:4494 次
发布时间:2019-06-08

本文共 5153 字,大约阅读时间需要 17 分钟。

Java 8 – Filter a Map examples

Few Java examples to show you how to filter a Map with Java 8 stream API.

Before Java 8 :

Map<Integer, String> map = new HashMap<>();

map.put(1, "linode.com");
map.put(2, "heroku.com");
String result = "";
for (Map.Entry<Integer, String> entry : map.entrySet()) {
if("something".equals(entry.getValue())){
result = entry.getValue();
}
}

With Java 8, you can convert a Map.entrySet() into a stream, follow by a filter() and collect() it.

Map<Integer, String> map = 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<Integer, String> collect = map.entrySet().stream()
.filter(x -> x.getKey() == 2)
.collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
// or like this
Map<Integer, String> collect = map.entrySet().stream()
.filter(x -> x.getKey() == 3)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

1. Java 8 – Filter a Map

A full example to filter a Map by values and return a String.

TestMapFilter.java

package com.mkyong;

import java.util.HashMap;

import java.util.Map;
import java.util.stream.Collectors;

public class TestMapFilter {

public static void main(String[] args) {

Map<Integer, String> 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<Integer, String> 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);

}

}

Output

Before Java 8 : aws.amazon.com

With Java 8 : aws.amazon.com
With Java 8 : linode.com,heroku.com

2. Java 8 – Filter a Map #2

Yet another example to filter a Map by key, but this time will return a Map

TestMapFilter2.java

package com.mkyong;

import java.util.HashMap;

import java.util.Map;
import java.util.stream.Collectors;

public class TestMapFilter2 {

public static void main(String[] args) {

Map<Integer, String> 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<Integer, String> 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<Integer, String> 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}

}

}

Output

{2=heroku.com}

{1=linode.com, 2=heroku.com, 3=digitalocean.com}

3. Java 8 - Filter a Map #3 - Predicate

This time, try the new Java 8 Predicate

TestMapFilter3.java

package com.mkyong;

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 <K, V> Map<K, V> filterByValue(Map<K, V> map, Predicate<V> 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<Integer, String> 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<Integer, String> filteredMap = filterByValue(HOSTING, x -> x.contains("linode"));
System.out.println(filteredMap);

// {1=linode.com, 4=aws.amazon.com, 5=aws2.amazon.com}

Map<Integer, String> filteredMap2 = filterByValue(HOSTING, x -> (x.contains("aws") || x.contains("linode")));
System.out.println(filteredMap2);

// {4=aws.amazon.com}

Map<Integer, String> filteredMap3 = filterByValue(HOSTING, x -> (x.contains("aws") && !x.contains("aws2")));
System.out.println(filteredMap3);

// {1=linode.com, 2=heroku.com}

Map<Integer, String> filteredMap4 = filterByValue(HOSTING, x -> (x.length() <= 10));
System.out.println(filteredMap4);

}

}

Output

{1=linode.com}

{1=linode.com, 4=aws.amazon.com, 5=aws2.amazon.com}
{4=aws.amazon.com}
{1=linode.com, 2=heroku.com}
http://www.mkyong.com/java8/java-8-filter-a-map-examples/

转载于:https://www.cnblogs.com/shy1766IT/p/10021882.html

你可能感兴趣的文章
关于fork的一道经典面试题
查看>>
package,继承,访问修饰符
查看>>
Freepbx
查看>>
DBS:TestSystem
查看>>
【共读Primer】51.[6.3]返回类型和return语句--列表初始化返回值 Page203
查看>>
第一次作业
查看>>
是否需要有代码规范
查看>>
SQL*Plus 系统变量之14 - DEF[INE]
查看>>
桥叔时间
查看>>
耦合内聚封装
查看>>
qbxt联赛集训d1t3
查看>>
vprintf 和 vsnpintf 的用法
查看>>
201671030108 +词频统计软件项目报告
查看>>
CDOJ 1135 邱老师看电影 概率dp
查看>>
Android编译系统中的Android.bp【转】
查看>>
linux字符设备学习笔记【原创】
查看>>
UnzipUtil
查看>>
2012 Multi-University Training Contest 1
查看>>
实验三
查看>>
如何解决mysql中读取含表情符号的内容无法识别的问题
查看>>