我试图将这段(简化的)代码转换为使用Java-8流的形式:
Map<String, String> files = new ConcurrentHashMap<String, String>();
while(((line = reader.readLine()) != null) {
if(content != null)
files.put("not null"+line, "not null"+line);
else
files.put("its null"+line, "its null"+line);
}
reader.close();
以下是我尝试过的方法:
files = reader.lines().parallel().collect((content != null)?
(Collectors.toConcurrentMap(line->"notnull"+line, line->line+"notnull")) :
(Collectors.toConcurrentMap(line->line+"null", line->line+"null")));
但是,在IntelliJ上,所有关于
line->line+"..."
的内容都会出现“循环推理”信息。什么是循环推理?这个逻辑有错误吗?我在Stack Overflow上注意到了一些类似的问题。但它们建议使用接口(Map)而不是其实现。但是,这里的
files
被声明为Map
。更新:增加更多背景信息,
content
是一个包含目录名称的字符串。 files
是一个包含多个文件路径的映射。哪些文件路径需要进入files
映射取决于是否填充了content
目录名称。
content
是一个字符串,保存着目录的名称。