将列表添加到另一个Arraylist会清除输出

时间:2018-12-11 05:39:51

标签: java arrays arraylist

我有一个邻近区域的CSV文件。我已经用Java读取了文件并创建了2D字符串数组。我的数据看起来像这样:

LAG

此数据表示区域100与101,102,152相邻。 我想创建一个新的2D数组,其中第一个元素是“键”,以下元素是相邻区域。像这样的东西:

SELECT
    readingValue,
    readingValue - (SELECT t2.readingValue FROM public."tableName" t2
                    WHERE t2.readingValue < t1.readingValue
                    ORDER BY t2.readingValue DESC LIMIT 1) AS consumption
FROM public."tableName" t1;

我使用了一个字符串数组,因为有些值不全是整数。

这是我正在尝试的:

100 , 101
100, 102
100, 152
200, 201
200, 202

我的问题是,当我清除内部列表时,我可以开始用新列表填充列表,它也会删除传递给输出列表的列表。我不知道为什么。

2 个答案:

答案 0 :(得分:1)

public static Map<String, Set<String>> group(List<String> lines) {
    final Pattern comma = Pattern.compile(",\\s*");
    Map<String, Set<String>> map = new TreeMap<>();

    lines.stream()
        .map(comma::split)
        .forEach(line -> map.compute(line[0], (region, neighbors) -> {
            neighbors = neighbors != null ? neighbors : new TreeSet<>();
            neighbors.add(line[1]);
            return neighbors;
        }));

    return map;
}

演示:

List<String> data = Arrays.asList(
        "100, 101",
        "100, 102",
        "100, 152",
        "200, 201",
        "200, 202");
Map<String, Set<String>> map = group(data);

输出:

"100": ["101", "102", "152"]
"200": ["201", "202"]

答案 1 :(得分:0)

我为您的输出写了一个sudo逻辑,您也可以用这种方式。

请仔细阅读以下代码,

public class Main {

    static int array[][]={{100,101},{100,102},{100,152},{200,300},{200,500}};
    static Map m =new HashMap();
    public static void main(String[] args) {
        for (int[] innerArray: array) {
            if(!m.containsKey(innerArray[0])){
                List tempLst=new ArrayList<>();
                tempLst.add(innerArray[1]);
                m.put(innerArray[0], tempLst);
            }
            else
            {
                List tempLst=(ArrayList)m.get(innerArray[0]);
                tempLst.add(innerArray[1]);
                m.put(innerArray[0], tempLst);
            }
        }
        System.out.println(Arrays.asList(m)); // method 1

    }
}

输出:[{100 = [101,102,152],200 = [300,500]}]