簡體   English   中英

如何將我從文件中讀取的數據放入哈希圖<String, Set<String> &gt;?

[英]How to put data i read from file to 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();

我決定使用 Hashmap id 作為鍵,使用一組 ip 作為值。 這是正確的方法嗎? 如果不是,還有什么其他選擇?

您已經擁有 IP 地址所屬的User ,我建議您將其用作第二個數據結構的鍵:

Map<User, Set<InetAddress>> mappings = new HashMap<>();

(我在這里使用了InetAddress ,但您可能已經有一個用於此的類?)

然后,您可以查找或創建給定用戶的 IP 地址集並添加新條目:

InetAddress address = InetAddress.getByName(ip);
mappings.computeIfAbsent(user, ignored -> new HashSet<>()).add(address);

您的代碼還有其他幾個可能的問題:

  1. 您將每一行分成四個部分,但您的示例數據只有兩個?

  2. 當您聲明一個用戶可以擁有多個 IP 地址(這是第二個數據結構的點)時,您將為每個條目創建一個用戶。 您要先檢查userdb是否已經有該用戶,即:

        final User user;
        if(users.containsKey(id)) {
            user = users.get(id);
        }
        else {
            user = new User(id);
            users.put(id, user);
        }

(您可以在computeIfAbsent再次使用computeIfAbsent方法來簡化邏輯)。

如果您決定使用它作為鍵,您的User類應該正確實現hashCodeequals 替代方案 #1 只是用戶 ID 作為密鑰。 備選方案#2 將Set<InetAddress>移動到它邏輯上無論如何都存在的User類中。

最后,將線分割四次沒什么意義,我想這對這個練習來說無關緊要,但養成一個好習慣: final String[] parts = line.split(";"); String ip = parts[0]; ... final String[] parts = line.split(";"); String ip = parts[0]; ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM