我尝试从流中获取订单地图.我有下一个代码:
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;
Run Code Online (Sandbox Code Playgroud)
在哪里我尝试订购数据流,我认为该地图也是订购的.但是我错了.我认为调用collect(Collectors.toMap())不保存流的顺序.有没有例子我怎么能这样做?
假设allConfigurations.stream按照你所说的维持秩序......
您可以使用Collectors.toMap带有a 的重载,mapSupplier因此您可以传递一个,LinkedHashMap因为它维护了插入顺序.
Collectors.toMap(
plugin -> plugin.getId(),
plugin -> new
PatternWrapper(plugin.getId(), Pattern.
compile(plugin.getValue())),
(left, right) -> left,
LinkedHashMap::new);
Run Code Online (Sandbox Code Playgroud)
这里的第三个参数是合并函数,用于解决与同一个键关联的值之间的冲突.但这不应成为问题,因为您的原始代码中没有.
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |