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

标签 java java-8 stream hashmap

我尝试在对 map 进行排序后将 map 键分配给整数数组。

这就是我正在尝试的:

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;
}

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

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

正确的方法是什么?

最佳答案

您的流未对 map 的条目集进行适当排序。此外,仅调用 sorted 不会运行任何排序代码(不执行任何终端操作)。

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

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

关于Java:通过流将排序的映射键分配给数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51278389/

相关文章:

java - ScheduledExecutorService - 程序在一次性操作后未结束

java - 如何编码 Stream.findNth()?

web-services - 在接收服务器上没有磁盘缓冲的 Jersey 多部分流

scala - 直到?处理分块输入。如何?

c# - 由于事先不知道长度,因此如何录制到Stream中?

java - 使用 Mockito 模拟 hibernate 的 SessionFactory 时出现问题

lambda - 如何在 Java 8 中传递带有参数的 lambda 表达式作为参数?

java - 为什么这个通用的 java 代码不能编译?

Java servlet 不分派(dispatch)到另一个 servlet

java - 无法在 android 中获取 `java.net.UnknownHostException` 的堆栈跟踪