bob*_*sie 3 java lambda java-8 java-stream
我正在尝试在运行时读取Java系统属性,基于includes列表进行过滤(此处硬编码但通常通过属性文件注入),最后按键排序并转换为a Map<String, String>.这就是我提出的,但不确定它是否是最优雅的解决方案.
final List<String> includes = Arrays
.asList("java.version", "PID", "os.name", "user.country"); // hard coded here but (usually defined in a properties file)
Map<String, String> systemMap = System.getProperties()
.entrySet().stream()
.filter(s -> includes != null && includes.contains(s.getKey()))
.sorted(Comparator.comparing(
Map.Entry::getKey, Comparator.comparing(e -> (String) e))
)
.collect(Collectors.toMap(
e -> (String) e.getKey(),
e -> (String) e.getValue(),
(e1, e2) -> e2,
LinkedHashMap::new)
);
Run Code Online (Sandbox Code Playgroud)
我很想知道代码是否可以整理.
如何扭转这一局面,并使用stream了的includes名单呢?这样,您不必一直解压缩那些映射条目,您可以使用sorted,如果includes只包含有效的属性,您可能甚至不需要filter.(另外,在地图中查找比列表中的查找更快,但这可能并不重要.)
Properties props = System.getProperties();
Map<String, String> systemMap = includes.stream()
.filter(props::containsKey)
.sorted()
.collect(Collectors.toMap(s -> s, props::getProperty,
(e1, e2) -> e2,
LinkedHashMap::new)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1968 次 |
| 最近记录: |