使用流的Java8地图排序
如何按键字符串对映射进行排序 我的地图结构是这样的使用流的Java8地图排序,java,java-8,Java,Java 8,如何按键字符串对映射进行排序 我的地图结构是这样的 Map<String, List<Mobile>> mobiles = new HashMap<String, List<Mobile>>(); mobiles.put("Samsung", ListOfMobileModels); mobiles.put("Nokia", ListOfMobileModels); mobiles.put("Apple", ListOfMobileModels)
Map<String, List<Mobile>> mobiles = new HashMap<String, List<Mobile>>();
mobiles.put("Samsung", ListOfMobileModels);
mobiles.put("Nokia", ListOfMobileModels);
mobiles.put("Apple", ListOfMobileModels);
mobiles.put("Blackberrey", ListOfMobileModels);
/** Sort Like below**/
mobiles.put("Apple", ListOfMobileModels);
mobiles.put("Blackberrey", ListOfMobileModels);
mobiles.put("Samsung", ListOfMobileModels);
mobiles.put("Nokia", ListOfMobileModels);
Map mobiles=newhashmap();
mobiles.put(“三星”,手机模型列表);
mobiles.put(“诺基亚”,手机模型列表);
手机。put(“苹果”,手机模型列表);
手机。put(“黑莓”,手机模型列表);
/**有点像下面**/
手机。put(“苹果”,手机模型列表);
手机。put(“黑莓”,手机模型列表);
mobiles.put(“三星”,手机模型列表);
mobiles.put(“诺基亚”,手机模型列表);
我在另一张地图上有手机排行榜,比如苹果1、黑莓2、三星3、诺基亚4
如何使用stream或任何Comparator对该地图进行排序?看一看这个例子:
SortedMap<String, String> fileExtensions = new TreeMap<>();
// Adding new key-value pairs to a TreeMap
fileExtensions.put("python", ".py");
fileExtensions.put("c++", ".cpp");
fileExtensions.put("kotlin", ".kt");
fileExtensions.put("golang", ".go");
fileExtensions.put("java", ".java");
// Printing the TreeMap (Output will be sorted based on keys)
System.out.println(fileExtensions);
}
HashMaps没有任何顺序,没有顺序排序就没有意义。您可以使用另一种类型的映射。要查看不同类型的映射,只需使用
TreeMap
,您应该遵循Java命名约定:变量名总是以camelCase编写的,这意味着它们以小写开头。所以ListOfMobileModels
应该是ListOfMobileModels
@Deadpool你完全正确,TreeMap是这里的关键
import java.util.*;
public class Main2 {
public static void main(String[] args) {
SortedMap<RankComparator,List<Mobile>> mobiles = new TreeMap<>();
List<Mobile> mobiles1 = new ArrayList<>();
mobiles.put(new RankComparator(Rank.Samsung), mobiles1);
mobiles.put(new RankComparator(Rank.Nokia), mobiles1);
mobiles.put(new RankComparator(Rank.Apple), mobiles1);
mobiles.put(new RankComparator(Rank.Blackberry), mobiles1);
((TreeMap<RankComparator, List<Mobile>>) mobiles).entrySet().forEach(e -> System.out.println(e.getKey().rank));
}
}
class Mobile{
Rank rank;
public Mobile(Rank rank) {
this.rank = rank;
}
}
enum Rank{
Apple(1),
Blackberry(2),
Samsung(3),
Nokia(4);
int rank;
Rank(int i) {
this.rank = i;
}
}
class RankComparator implements Comparable<RankComparator>{
Rank rank;
public RankComparator(Rank rank) {
this.rank = rank;
}
@Override
public int compareTo(RankComparator otherRank) {
return this.rank.rank - otherRank.rank.rank;
}
}
Apple
Blackberry
Samsung
Nokia