使用流的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