Map函数 中的compute简单使用
参考文章:参考
1. Map.compiter使用是将最新的map存储的键值返回
example:
//获取一个字符串中的字符出现频率
String str = "hello java, i am vary happy! nice to meet you";
// jdk1.8之前的写前
HashMap<Character, Integer> result1 = new HashMap<>(32);
for (int i = 0; i < str.length(); i++) {
char curChar = str.charAt(i);
Integer curVal = result1.get(curChar);
if (curVal == null) {
curVal = 1;
} else {
curVal += 1;
}
result1.put(curChar, curVal);
}
System.out.print(result1);
2. 进行使用compute属性
//进行使用compute属性进行求解字符串出现的词的频率
String str1 = "hello java, i am vary happy! nice to meet you";
// jdk1.8的写法
HashMap<Character, Integer> result2 = new HashMap<>(32);
for (int i = 0; i < str1.length(); i++) {
char curChar = str1.charAt(i);
//compute是返回最新的值
result2.compute(curChar, (k, v) -> {
if (v == null) {
v = 1;
} else {
v += 1;
}
return v;
});
}
System.out.println(result1);
result2.compute(curChar, (k, v) -> {
if (v == null) {
v = 1;
} else {
v += 1;
}
return v;
});
进行的compute操作,看源码
第一个参数为key,第二个参数是一个BiFunction的参数,(我们可以知道Function的操作),在Java8中一般Function的函数是只传一个参数。
// Function的操作
Function<Integer, Integer> fun1= arg -> arg * 5;
Integer apply = fun1.apply(10);
// 50
System.out.println(apply);
// BiFunction的操作
BiFunction<Integer, Integer, Integer> fun2 = (arg1, arg2) -> arg1 + 2*arg2;
Integer sum = fun2.apply(10, 20);
// 50
System.out.println(sum);