我有一个邻近区域的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
我的问题是,当我清除内部列表时,我可以开始用新列表填充列表,它也会删除传递给输出列表的列表。我不知道为什么。
答案 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]}]