java如何将我从文件中读取的数据放入hashmap<String,Set<String>>?
我需要存储我读过的文件中的数据,数据结构是:ip地址和id(1.10.186.214;2812432),id可以有多个ip
下面是我用来读取文件的代码。我使用Treemap userdb来存储有关用户的信息。我还需要另一个地图来存储id和ip
File file = new File(path);
Scanner scanner = new Scanner(file);
Map<String, User> userdb = new TreeMap<>();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String ip = line.split(";")[0];
String id = line.split(";")[1];
String fio = line.split(";")[2];
String adress = line.split(";")[3];
User user = new User(id, fio, adress);
userdb.put(id, user);
}
scanner.close();
我已经决定使用HashMapID作为键,使用ip集作为值。这条路对吗?如果不是,还有什么其他选择
# 1 楼答案
您已经拥有IP地址所属的
User
,我建议您将其用作第二个数据结构的密钥:(我在这里使用了
InetAddress
,但你可能已经有了这个类?)然后,您可以查找或创建给定用户的IP地址集,并添加新条目:
您的代码还有几个其他可能的问题:
您将每一行拆分为四个组件,但示例数据只有两个组件
当您声明一个用户可以有多个IP地址(这是第二个数据结构的要点)时,可以为每个条目创建一个新的用户。首先要检查用户是否已经在
userdb
中,即:(您可以在这里再次使用
computeIfAbsent
方法来简化逻辑)如果您决定将
User
类用作键,那么它应该正确地实现hashCode
和equals
。备选方案#1仅将用户ID作为密钥。备选方案#2将Set<InetAddress>
移动到User
类中,它在逻辑上仍然存在最后,把这条线拆分四次并没有多大意义,我想这对这个练习来说并不重要,但养成一个好习惯:
final String[] parts = line.split(";"); String ip = parts[0]; ...