2017-04-22 26 views
0

我正在創建一個項目,我正在創建一個過去的總統及其血型的TreeMap。第一步是從血型生成地圖到總統,然後按字母順序打印出來。我有這個部分是正確的,但我正在努力與下一部分。對於項目的後半部分,我應該創建一個逆映射,其中總統是關鍵,血型是價值。我似乎無法弄清楚如何在不摧毀上半場的情況下實現這一目標。我附上了輸出應該是什麼樣子的圖片。我很欣賞任何反饋。 Output Image如何獲得TreeSet的逆映射

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 
+1

你只需要進行第二次'地圖<字符串,請設置>'並像往常一樣將元素添加到該元素中,但是會反轉鍵值。 –

+0

可能的重複:http://stackoverflow.com/questions/20412354/reverse-hashmap-keys-and-values-in-java但是你的情況有點複雜,因爲你需要兩個循環:一個通過'type2pres.entrySet ()'和另一個'entry.getValue()'。這不應該干擾你的第一張地圖,因爲你需要爲反向映射製作另一張地圖。 – Radiodef

回答

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

    } 
+0

如果我想確定總統是按字母順序排列的,但不是血型,我該如何去做? – Ironman131

0

您可以打印ascen爲了所有名稱與Java 8的stream(),如:

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