Java8新特性stream使⽤:Map的key和value排序Java8新特性学习笔记Stream
背景:有个简单的算法题;给出⼀个字符串,区分⼤⼩写,给出字符串中出现字符最多的前3个;
解法1: 基本思路,字符串转化为字符数组,遍历字符数组,存储到集合Map中,key=字符/value=字符出现的个数;
/**
* 给定字符串,区分⼤⼩写,给出,字符重复个数最多的前5个
* @param str
* @return
*/java stream
public static String getIndex5Char(String str, Integer top5){
if (null == str || str.length()==0){
return null;
}
//1、字符串转字符数组
char[] strArr = CharArray();
Map<Character,Integer> tmpMap = new HashMap<>();
// 2、字符数组存储到Map :key字符,value字符重复次数
for(int i = 0 ;i < strArr.length; i++){
ainsKey( strArr[i] ) ){
tmpMap.put(strArr[i],(strArr[i])+1);
}else{
tmpMap.put(strArr[i],1);
}
}
//3、map按照values⽣序排列
Map sortedMap = sortByValue(tmpMap);
//4、获取Map的top5
return getTopIndexMaps(sortedMap,top5).toString();
}
/**
* map集合,按照value排列
* @param maps
* @param <K>
* @param <V>
* @return
*/
public static <K,V extends Comparable<? super V> > Map<K,V> sortByValue(Map<K,V> maps){
Map<K,V> result = new LinkedHashMap<>();
sorted( Map.Entry.<K,V>comparingByValue().reversed() ).forEachOrdered(e-> result.Key(),e.getValue()));
return result;
}
/**
* Map集合,按照key排序
* @param maps
*/
public static <K extends Comparable<? super K>, V > Map<K,V> sortByKey (Map<K,V> maps){
Map<K,V> result = new LinkedHashMap<>();
}
/**
* 获取Map 的前index个
* @param maps
* @param topIndex
* @param <K>
* @param <V>
* @param <V>
* @return
*/
public static <K,V> Map <K,V> getTopIndexMaps(Map <K,V> maps,Integer topIndex){ Map<K,V> tmpMap = new LinkedHashMap<>();
Integer sort = 1;
maps.forEach((key,value)->{
if (sort <= topIndex){
tmpMap.put(key,value);
}
});
return tmpMap;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论