Java8在给定一组有序键的情况下,按键对映射进行排序
我想在Java8中使用按键流对映射进行排序,但顺序是在有序集中定义的 订购键:Java8在给定一组有序键的情况下,按键对映射进行排序,java,sorting,java-8,java-stream,Java,Sorting,Java 8,Java Stream,我想在Java8中使用按键流对映射进行排序,但顺序是在有序集中定义的 订购键: LinkedHashSet<String> keysToOrderBy = new LinkedHashSet<String>(); keysToOrderBy.add("b"); keysToOrderBy.add("c"); keysToOrderBy.add("d"); keysToOrderBy.add("a"); keysToOrderBy.add("e"); 我假设我必须使用自定
LinkedHashSet<String> keysToOrderBy = new LinkedHashSet<String>();
keysToOrderBy.add("b");
keysToOrderBy.add("c");
keysToOrderBy.add("d");
keysToOrderBy.add("a");
keysToOrderBy.add("e");
我假设我必须使用自定义比较器?您不必使用自定义比较器;您只需迭代已排序的元素,而不是未排序的元素
LinkedHashMap<String, Object> ordered = keysToOrderBy.stream()
.filter(map::containsKey)
.collect(Collectors.toMap(
e -> e,
map::get,
(v1, v2) -> v1, LinkedHashMap::new));
LinkedHashMap ordered=keysToOrderBy.stream()
.filter(映射::containsKey)
.collect(collector.toMap)(
e->e,
地图::获取,
(v1,v2)->v1,LinkedHashMap::new);
顺便问一下,并行是否会影响迭代的顺序?因为我希望订单有秩序,并确保它的效率。我可能要整理多达100把钥匙。也许对于100键的直接迭代是可以的,我想。但是任何我可以节省时间的地方都是好的。对于几百个键,并行化要比一开始就按顺序进行要慢。你必须有更大的数据,并行性才值得。对此我有一些建议。一般来说,在你做了数学和测量以证明不是这样之前,总是假设并行化操作会使它们变慢。我相信并行化是可行的,但即便如此,它更可能损害性能而不是帮助性能。我需要在1000张地图上的100个关键点上进行并行化。可能还不够大。我会通过测试发现…在这种情况下,在地图上并行化可能是最好的方法,而不需要在条目上并行化。
LinkedHashMap<String, Object> ordered =
map.entrySet()
.stream()
.parallel()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(v1, v2) -> v1,
LinkedHashMap::new
));
"b"
"c"
"d"
"a"
"e"
LinkedHashMap<String, Object> ordered = keysToOrderBy.stream()
.filter(map::containsKey)
.collect(Collectors.toMap(
e -> e,
map::get,
(v1, v2) -> v1, LinkedHashMap::new));