【发布时间】:2018-07-18 14:47:52
【问题描述】:
我尝试从流中获取订单图。我有下一个代码:
Map<String, PatternWrapper> regexps = allConfigurations
.stream()
.flatMap(configuration -> configuration.getPlugins().stream())
.sorted(
(left, right) -> {
if (left.getType().equals(ObfuscationType.REGEX_BLACKLIST) &&
right.getType().equals(ObfuscationType.REGEX_BLACKLIST))
return 0;
else if (left.getType().equals(ObfuscationType.REGEX_BLACKLIST) &&
(!right.getType().equals(ObfuscationType.REGEX_BLACKLIST)))
return 1;
else
return -1;
}
)
// .sorted(LogConfiguration.Plugin::compareTo)
.filter(plugin -> (ObfuscationType.REGEX.equals(plugin.getType())
|| ObfuscationType.REGEX_BLACKLIST.equals(plugin.getType())))
.collect(Collectors.toMap(
plugin -> plugin.getId(),
plugin -> new
PatternWrapper(plugin.getId(), Pattern.
compile(plugin.getValue()))));
return regexps;
我尝试订购数据流的地方,我认为该地图也已订购。但是我错了。我认为调用 collect(Collectors.toMap()) 不会保存流的顺序。有没有我可以做到这一点的例子?
【问题讨论】:
-
您可以将
Map更改为具有排序功能的TreeMap。您可以根据您的键定义自己的顺序(或使用String的自然顺序)。 -
@tobias_k 排序并不意味着有序
-
@Nick 你明白为什么哈希图没有排序吗? (这是
Collectors.toMap()中使用的默认映射) -
附带说明,您可以通过使用
.sorted(Comparator.comparing(element -> element.getType().equals(ObfuscationType.REGEX_BLACKLIST)));来显着简化您的代码
标签: java java-stream