java - 如何从 Java 中的 CSV 数据流中构建包含对其他对象的引用的对象
问题描述
我正在开发一个简单的程序,可以在一系列房间中移动一个角色。我正在使用 Stream 从 CSV 文件创建“房间”对象(我已经剥离了房间和方法以突出显示我的查询)。
在最终对象中,我想要一个包含 Direction 和关联 Room 的 hashmap。
CVS 文件格式:
房间 ID,房间描述,北,东,南,西
示例厨房、厨房、浴室、室外、休息室、阁楼
我的问题是,因为我不知道在流期间创建了哪个其他房间对象(如果有的话)。这意味着我需要在存储 String、String 的虚拟映射后读取 CSV 文件,然后在读取 CSV 文件后返回。查看已创建房间的集合,对其进行迭代并创建最终预期的 String,Room 的 HashMap
private HashMap<Direction,Room> roomexits;
public Room(String name, String description) {
this.name = name;
this.description = description;
}
我当前的阅读器方法如下所示:-
try {
Path path = Paths.get("src/CSV/map.csv");
BufferedReader reader = new BufferedReader(Files.newBufferedReader(path, Charset.forName("UTF-8")));
roomsTobeBuilt = reader.lines().map(line -> {
String[] tempArray = line.split(",");
Room room = new Room(tempArray[0],tempArray[1]);
return room;
}).collect(Collectors.toCollection(ArrayList::new));
} catch (IOException e) {
throw new UncheckedIOException(e);
}
将虚拟 hashmap 对象的创建插入到流中。
HashMap<String,String> dummy = new HashMap<>();
dummy.put("north",tempArray[2]);
dummy.put("east",tempArray[3]);
dummy.put("south",tempArray[4]);
dummy.put("west",tempArray[5]);
然后我会创建一个辅助方法来创建最终的 String,Room HashMap。这感觉笨重且冗长。有一个更好的方法吗?是否可以控制流的逻辑以允许在单个流中完成此操作?
解决方案
推荐阅读
- regex - 当脚本文件来自 zsh 时,为什么 BASH_REMATCH 返回空?
- java - 如何在 Spring Data JDBC 中插入默认值
- c - DevC++ 没有在我的代码中读取 typedef 结构
- d3.js - D3js Force Link 标签未显示
- python - 使用列表的 Python 程序
- jsp - Servlet doGet 在简单的 get 方法上返回 404?
- spring-boot - JPA 标准构建器相等方法未按预期工作
- reactjs - React 清理功能,有什么问题?
- prometheus - 如何将普罗米修斯标签显示为值?
- python - 将预期颜色列添加到类似热图的图中(seaborn)