2016-04-12 4 views
0
public <T> List<T> map2list(Map<T, T> map){ 

    List<T> list = new ArrayList<T>(map.keySet()); 
    return list; 

} 

私の方法は...しかし、それは動作しません。どのようにJava genericsを使用してマップキーをリストに入れる方法を作成できますか?このような

+1

エラーは何ですか? –

+0

マイマップが次のような場合:Map map = new HashMap ();メソッドは動作しません.... –

+0

さて、あなたは 'T 'が同時に文字列と整数であるとどう思いますか? – Voo

答えて

0

以下の例は動作しますので、たぶん、あなたのマップは、空である:

public class Utils { 

    public <T, K> List<T> map2list(Map<T, K> map) { 
     List<T> list = new ArrayList<T>(map.keySet()); 
     return list; 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     Map<String, Integer> map = new HashMap<String, Integer>(); 
     map.put("test1", 1); 
     map.put("test2", 2); 
     map.put("test3", 3); 
     Utils t = new Utils(); 
     List<String> result = t.map2list(map); 
     for (String key : result) { 
      System.out.println(key); 
     } 
    } 

} 

には、次の印刷:

test2は
test3に
test1の

+0

Map map =新しいHashMap (); map.put( "test1"、1); map.put( "test2"、2); map.put( "test3"、3); Utils t =新しいUtils(); リスト結果= t.map2list(map); (キー文字列:結果)のため { のSystem.out.println(キー) } –

+0

はステートレスユーティリティクラスメソッドとしてコメント –

+0

に応じてそれを修正し、 'map2list'は' static'でなければなりません。 –

0

マップの場合は、引数の値はStringであるキー& Integer値として、

public static <T, L> List<T> map2list (Map<T, L> map) { 
    List<T> list = new ArrayList<T>(map.keySet()); 
    return list; 
} 
0

<T>は、マップのランタイム型-aguments 1つのだけのタイプを定義し、方法以下試してください。

public static <T,K> List<T> map2list(Map<T, K> map){ 
    List<T> list = new ArrayList<T>(map.keySet()); 
    return list; 
} 

をそして、それは動作します:あなたは、マップのジェネリック医薬品の引数の異なる種類を持っているのであれば、あなたはK 2ジェネリック型Tを定義することにより、例えば、このようにそれを変更することができます。

また、このような状況は、あなたがあまりにもMap<String,String>または一般Map<T,T>を渡したい場合は、そのサポートしています。これは役立つだろう

希望。

+0

うん..それは動作します.....ありがとうございました.... –

+0

ようこそ。このサイトでは、通常、回答の左側にある緑色のチェックマークをチェックすることで、質問の回答として回答を確認することができます。 – STaefi

関連する問題