首页 > 解决方案 > 如何从 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。这感觉笨重且冗长。有一个更好的方法吗?是否可以控制流的逻辑以允许在单个流中完成此操作?

标签: javahashmapjava-stream

解决方案


推荐阅读