我有一个嵌套的map作为
Map<String, HashMap<String, Integer>> map = new TreeMap<String, HashMap<String, Integer>>();此外,我有深度地图作为
HashMap<String, Integer> deep_map = new HashMap<String, Integer>();我从txt文件中读取代码行,并将其放入嵌套的map中,如下所示
try {
FileInputStream fstream = new FileInputStream("file.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
String[] tokens = strLine.split(" ");
deep_map.put(tokens[1], Integer.parseInt(tokens[2]));
map.put(tokens[0], deep_map);
}
in.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}txt文件的内容如下
John AA 80
Adam BB 60
Natalie BB 65名称是地图的关键字,等级是嵌套地图的关键字,分数是嵌套地图的值。因此,我如何按分数降序对它们进行排序?
发布于 2020-01-03 23:40:58
map应该包含不同的deep_map实例,否则map的每个键都将具有相同的Map对象,而您已经覆盖了这些值。
所以你只需要as字段
SortedMap<String, Map<String, Integer>> map = new TreeMap<>();读数可以如下所示。我没有使用所有的功能,因为这将需要很多解释。
Path path = Paths.get("file.txt");
try (Stream<String> lines = Files.lines(path, Charset.defaultCharset()) {
lines.map(line -> line.split(" "))
.filter(tokens -> tokens.length == 3)
.forEach(tokens -> {
Map<String, Integer> deepMap = map.get(tokens[0]);
if (deepMap == null) {
deepMap = new HashMap<String, Integer>();
map.put(tokens[0], deepMap);
}
deepMap.put(tokens[1], Integer.parseInt(tokens[2]));
});
} catch (IOException e) {
System.err.println("Error: " + e.getMessage());
}然而,将数据按分数降序排序:
SortedMap<Integer, Map<String, String>> scoreToCourseToName =
new TreeMap<>(Comparator.reversed());
Path path = Paths.get("file.txt");
try (Stream<String> lines = Files.lines(path, Charset.defaultCharset()) {
lines.map(line -> line.split(" "))
.filter(tokens -> tokens.length == 3)
.forEach(tokens -> {
Integer score = Integer.valueOf(tokens[2]);
Map<String, String> deepMap = scoreToCourseToName.get(score);
if (deepMap == null) {
deepMap = new TreeMap<String, Integer>();
scoreToCourseToName.put(score, deepMap);
}
deepMap.put(tokens[1], Integer.parseInt(tokens[0]));
});
} catch (IOException e) {
System.err.println("Error: " + e.getMessage());
}并且有更多的功能使用:
SortedMap<Integer, Map<String, String>> scoreToCourseToName =
new TreeMap<>(Comparator.reversed());
Path path = Paths.get("file.txt");
try (Stream<String> lines = Files.lines(path, Charset.defaultCharset()) {
lines.map(line -> line.split(" "))
.filter(tokens -> tokens.length == 3)
.forEach(tokens -> {
Integer score = Integer.valueOf(tokens[2]);
Map<String, String> deepMap =
scoreToCourseToName.computeIfAbsent(score, sc -> new TreeMap<>());
deepMap.put(tokens[1], Integer.parseInt(tokens[0]));
});
} catch (IOException e) {
System.err.println("Error: " + e.getMessage());
}发布于 2020-01-03 23:27:00
Map是按键排序的,所以我认为最好的方法是创建一个新的Map,它使用score作为键,使用一个名称列表作为值。
但我不明白你的结构。
https://stackoverflow.com/questions/59580872
复制相似问题