如何在Java中创建具有一对多关系的属性?

问题描述

我有一个文件,其中保存了一个带有某些条目的键(一对多的关系)。
我需要从该文件提取按键搜索的值。
我刚刚找到了一个实用程序(java.util.Properties)来处理Java中的属性文件
它对于属性文件非常有效。
但是它返回的是搜索到的键的第一次出现。
由于存在属性文件,因此我希望已经存在一个允许多个结果的版本。

是否存在一种解决方案,该解决方案返回所研究密钥的字符串数组?

解决方法

属性由哈希表支持,因此密钥必须唯一。 因此,如果您要坚持使用同一个键的多个实例,则可以自己实现解析(如果您不太依赖于Properties管理的额外功能):

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

public class FileInput {
    Properties porp;

    public static Map<String,List<String>> loadProperties(String file) throws IOException
    {
        HashMap<String,List<String>> multiMap = new HashMap<>();

        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            String line = null;
            while ((line = br.readLine()) != null) {
                if (line.startsWith("#"))
                    continue; // skip comment lines
                String[] parts = line.split("=");
                multiMap.computeIfAbsent(parts[0].trim(),k -> new ArrayList<String>()).add(parts[1].trim());
            }
        }
        return multiMap;
    }
    
    public static void main(String[] args) throws IOException {
        Map<String,List<String>> result=loadProperties("myproperties.properties");
    }
}

更新:改进了异常处理(有效备注@rzwitsersloot)。我更喜欢抛出异常,以便调用者可以决定如果缺少属性文件该怎么办。