Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何得到树集的逆映射_Java_Arraylist_Treemap_Treeset - Fatal编程技术网

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);