2017-06-29 10 views
2

のHashMapにリストから項目を置く:のJava:私はここにリスト持って効率的に

List<QueryStrings> queryStrings 

とクエリ文字列は、私はどこのHashMapにリストを配置する必要があり

public class QueryStrings { 
    private Integer id; 
    private String rel; 
    private String impl; 
} 

だけの単純なクラスですidがキーになります、私は一度にリストの項目をループし、今、この権利のようにそれをやっている:

HashMap<Integer, QueryStrings> queryMap = new HashMap<>(); 
for (QueryStrings element : queryStrings) { 
    Integer thisId = Integer.parseInt(element.getId()); 
    queryMap.put(thisId, element); 
} 

はベティがありますこの方法は?私は各項目をループしたくないです、それは可能ですか?

編集:

申し訳ありませんが、私は整数を解析するべきではありませんので、コードは次のようになります。それはすでにint型かどう

HashMap<Integer, QueryStrings> queryMap = new HashMap<>(); 
for (QueryStrings element : queryStrings) { 
    queryMap.put(element.getId(), element); 
} 
+0

が、私はこのような何かがJava8 に働くだろうと考えている '地図<整数、クエリ文字列> queryMap = queryStrings.stream()(toMap(element.getId()、要素))を集める;' –

+0

なぜ '呼び出しますparseInt() '? 'id'は既に' Integer'型です。直接IDを使用してください。 – markspace

+0

@ScaryWombat idはIntergerが正しいのですか?なぜ解析する必要があるのですか – soorapadman

答えて

4

int型のを解析しないでください!

HashMap<Integer, QueryStrings> queryMap = new HashMap<>(); 
for (QueryStrings element : queryStrings) { 
    queryMap.put(element.getId(), element); 
} 

つまり、Java 8の場合、パフォーマンスの違いはほとんどありませんが、より簡潔な構文を使用できます。

list.stream().collect(Collectors.toMap(QueryStrings::getId, Function.identity())); 
+0

彼のクラスはIntegerとして表示しますが、 –

+0

はそれを捕まえませんでした。間違いなく、より良い方法はInteger-> String-> Integer :-) –

関連する問題