【问题标题】:Java: Assign sorted map keys via stream to an arrayJava:通过流将排序的映射键分配给数组
【发布时间】:2018-07-11 06:14:39
【问题描述】:

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

这是我正在尝试的:

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) 打印流本身中的值但无法分配。

正确的方法是什么?

【问题讨论】:

  • 嗯,第二个 sn-p 不使用在第一个 sn-p 中创建的流。那么为什么要对键进行排序呢? map() 将条目映射到它们的键,然后是 mapToInt(),然后是 toArray()。
  • 怎么样?这就是我要问的。不太了解 java 8 库。
  • 然后阅读 javadoc。这就是它的用途。我给了你方法名称。应该不会太难。
  • 好的。会看看。

标签: java java-8 stream hashmap


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多