如何获得TreeSet的逆映射

时间:2017-04-22 16:01:11

标签: java arraylist treemap treeset

我正在开展一个项目,我正在创建一个过去的总统及其血型的TreeMap。第一步是生成从血型到总统的地图,然后按字母顺序打印出来。我有那个部分是正确的,但我正在努力与下一部分。对于项目的后半部分,我应该创建一个逆映射,其中总统是关键,血型是值。我似乎无法弄清楚如何在不搞砸上半场的情况下让它发挥作用。我附上了一张输出应该是什么样子的图片。我感谢任何反馈。 Output Image

    import java.io.*;
    import java.util.*;

public class BloodBank
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader infile = new BufferedReader( new FileReader( "type2pres.txt" ) );
        TreeMap<String,TreeSet<String>> type2pres = new TreeMap<String,TreeSet<String>>();

        while ( infile.ready() )
        {
            ArrayList<String> tokens = new ArrayList<String>( Arrays.asList( infile.readLine().split(",") ) );
            String bloodType = tokens.remove(0); 

            type2pres.put( bloodType, new TreeSet<String>(tokens) );
        }



        for ( String type  : type2pres.keySet() ) 
        {   TreeSet<String> presidents = type2pres.get( type );
            System.out.print( type + "\t" );


            for ( String pres : presidents )
            {
                System.out.print( pres  + "\t" );

            }
            System.out.println();


        } 



    } // MAIN


} // BLOODBANK

2 个答案:

答案 0 :(得分:0)

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

    } 

答案 1 :(得分:0)

您可以使用Java 8的stream()以ascen顺序打印所有名称,例如:

type2pres.entrySet().stream()
.flatMap(e -> e.getValue().stream().map(v -> v + "\t" + e.getKey()))
.sorted()
.forEach(System.out::println);