Ant*_*sev 0 java io nio java-8 java-stream
需要逐行读取文本并根据对象Entity成员的值解析每个文本.我的实体有下一个构造函数签名:
public Entity(int id, String name, double weight)
Run Code Online (Sandbox Code Playgroud)
文本文件有下一个内容:
ID,NAME,WEIGHT
1,Mario,80.2
2,Marco,91.1
...
100,Diego,78.12
Run Code Online (Sandbox Code Playgroud)
使用新的Java 8:Files::readAllLines方法我的解决方案非常庞大:
public class CoolApp {
private static final String SOURCE_FILE = "path/to/txt/file/entities.txt";
private static final int ID = 0;
private static final int NAME = 1;
private static final int WEIGHT = 2;
public static void main(String[] args) throws Exception {
boolean isHeader = true;
List<Entity> entities = new ArrayList<>();
for (String line : Files.readAllLines(Paths.get(SOURCE_FILE))) {
if (isHeader) {
isHeader = false;
}
else {
String[] snippets = line.split(",");
entities.add(new Entity(
Integer.parseInt(snippets[ID]),
snippets[NAME],
Double.parseDouble(snippets[WEIGHT])
));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
List<Entity> entities = Files.lines(Paths.get(SOURCE_FILE)).collect(...);
Run Code Online (Sandbox Code Playgroud)
List<Entity> entities =
Files.lines(Paths.get(SOURCE_FILE))
.skip(1) // skip the header line
.map(line -> line.split(",")) // transform each line to an array
.map(snippets -> new Entity(Integer.parseInt(snippets[ID]),
snippets[NAME],
Double.parseDouble(snippets[WEIGHT])) // transform each array to an entity
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
关于你的代码的注意事项:你应该使用trueand false而不是Boolean.TRUE和Boolean.FALSE(它们是布尔值而不是原始布尔值的实例).