Java 如何得到树集的逆映射
我正在做一个项目,我正在创建一个历任总统及其血型的树状图。第一步是生成一张从血型到总统的地图,然后按字母顺序打印出来。我有正确的那一部分,但我正在努力与下一部分。在项目的后半部分,我应该创建一个反向映射,其中总统是关键,血型是价值。我似乎不知道如何在不把上半场搞砸的情况下让它发挥作用。我附上了输出应该是什么样子的图片。我感谢您的反馈。Java 如何得到树集的逆映射,java,arraylist,treemap,treeset,Java,Arraylist,Treemap,Treeset,我正在做一个项目,我正在创建一个历任总统及其血型的树状图。第一步是生成一张从血型到总统的地图,然后按字母顺序打印出来。我有正确的那一部分,但我正在努力与下一部分。在项目的后半部分,我应该创建一个反向映射,其中总统是关键,血型是价值。我似乎不知道如何在不把上半场搞砸的情况下让它发挥作用。我附上了输出应该是什么样子的图片。我感谢您的反馈。 import java.io.*; 导入java.util.*; 公共级血库 { 公共静态void main(字符串[]args)引发异常 { Buffered
import java.io.*;
导入java.util.*;
公共级血库
{
公共静态void main(字符串[]args)引发异常
{
BufferedReader infle=新的BufferedReader(新文件读取器(“type2pres.txt”);
TreeMap type2pres=新的TreeMap();
while(infle.ready())
{
ArrayList标记=新的ArrayList(Arrays.asList(infle.readLine().split(“,”));
String bloodType=tokens.remove(0);
type2pres.put(血型,新树集(代币));
}
for(字符串类型:type2pres.keySet())
{TreeSet presidents=type2pres.get(type);
系统输出打印(类型+“\t”);
for(字符串主席:主席)
{
系统输出打印(pres+“\t”);
}
System.out.println();
}
}//主要
}//血库
用于(字符串类型:type2pres.keySet())
{
TreeMap map=newtreemap();
for(字符串主席:type2pres.get(type)){
地图放置(主席,类型);
系统输出打印(主席+“\t”);
System.out.println(type+“\t”);
}
}
您可以使用Java 8的stream()
按ascen顺序打印所有名称,例如:
type2pres.entrySet().stream()
.flatMap(e -> e.getValue().stream().map(v -> v + "\t" + e.getKey()))
.sorted()
.forEach(System.out::println);
您只需制作第二个
映射
,并像以前一样向其添加元素,但要反转键和值。可能重复:但您的情况稍微复杂一些,因为您需要两个循环:一个在type2pres.entrySet()
上,另一个在每个entry.getValue()
上。这不应该影响你的第一张地图,因为你需要为反向地图制作另一张地图。如果我想确定总统是按字母顺序排列的,而不是血型,我该怎么做?
for ( String type : type2pres.keySet() )
{
TreeMap<String, String> map = new TreeMap<>();
for (String president : type2pres.get(type)) {
map.put(president, type);
System.out.print( president + "\t" );
System.out.println( type + "\t" );
}
}
type2pres.entrySet().stream()
.flatMap(e -> e.getValue().stream().map(v -> v + "\t" + e.getKey()))
.sorted()
.forEach(System.out::println);