Java 8:Stream,NIO和Lambda

Nim*_*esh 1 java lambda nio java-8 java-stream

我有一个包含多行的文件.每行都可以转换为JSONObject.

示例行,

{"name": "a", "age": 28}
{"name": "b", "age": 20}
{"name": "c", "age": 30}
Run Code Online (Sandbox Code Playgroud)

我正在使用新IO读取此文件

Files.lines(path)
Run Code Online (Sandbox Code Playgroud)

我想使用流并将每一行转换为JSONObject,如,

JSONObject obj = new JSONObject(line);
Run Code Online (Sandbox Code Playgroud)

我没有得到如何使用流和lambda.有什么办法吗?

Ous*_* D. 7

使用Stream#map,例如:

List<JSONObject> result;
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {    
        result = stream.map(line -> new JSONObject(line)) // or map(JSONObject::new)
                       .collect(Collectors.toList());       
} catch (IOException e) { /* handle exception */}
Run Code Online (Sandbox Code Playgroud)

  • 请不要发布错误的异常处理.捕获,打印,然后忽略异常(如果没有异常发生则继续)是一种非常糟糕的编码实践.不要在这里向新手展示反模式. (6认同)
  • 然后在答案中说出来.添加`catch`子句与记住关闭流没有任何关系. (4认同)
  • 或者只是从示例代码中删除异常处理.问题不在于异常处理,为什么要用它"污染"样本呢?也许正确的解决方案是代码是声明`throws`的方法.也许是抓住并处理它.无论哪种方式,它都超出了此代码的范围. (2认同)