Java:通过流将已排序的映射键分配给数组

时间:2018-07-11 06:14:40

标签: java java-8 stream hashmap

我正在尝试对地图排序后将地图键分配给整数数组。

这就是尝试:

java.util.stream.Stream<Map.Entry<Integer,Integer>> sorted = 
                            myMap.entrySet().stream().sorted(Map.Entry.comparingByValue());

然后这就是分配方式:

int [] hotels = new int[myMap.size()];
int i = 0;

Set<Integer> keys = myMap.keySet();
for(Integer k:keys){
       hotels[i++] = k;
}

但是当我打印数组时,它不是按排序顺序打印,而是按常规映射顺序打印。

我知道一个方法:forEach(System.out:: println)用于在流本身中打印值,但无法分配。

正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

您的流未将地图的条目集排序到位。此外,仅调用sorted不会运行任何排序代码(不执行任何终端操作)。

您可以使用它来获取流中排序的数组:

int[] hotels = myMap.entrySet().stream()
                .sorted(Map.Entry.comparingByValue())
                .mapToInt(Map.Entry::getKey)
                .toArray();