2017-06-29 6 views
2

Ich habe eine Liste hier:Java: Putting Elemente aus Liste in HashMap effizient

List<QueryStrings> queryStrings 

und Querystrings ist nur eine einfache Klasse

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

ich die Liste in eine HashMap setzen müssen, wo die id wird der Schlüssel sein, ich tue es, wie dieses Recht jetzt, Looping der Liste ein Element zu einem Zeitpunkt:

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

gibt es eine bette r Weg zu diesem? Ich möchte nicht jedes einzelne Element wiederholen, ist das möglich?

Edit:

Sorry, ich soll die ganze Zahl nicht analysieren, so sollte der Code wie folgt aussehen:

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

Ich glaube, so etwas wie dies in Java8 'Map queryMap = queryStrings.stream() funktionieren würde, sammeln (toMap (element.getId(), Element).),' –

+0

Warum nennen ' parseInt() '? 'id' ist bereits vom Typ' Integer', benutze einfach die ID direkt. – markspace

+0

@ScaryWombat ID ist Interger richtig? Warum müssen wir analysieren – soorapadman

Antwort

4

Sie das int das nicht analysieren, wenn es bereits ein int!

Das heißt, wenn es Java 8 ist, können Sie mehr prägnante Syntax haben, obwohl die Leistungsunterschiede minimal sind.

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

Seine Klasse zeigt es als Integer, aber –

+0

hat das nicht verstanden - auf jeden Fall ist es besser, nicht von Integer -> String -> Integer zu gehen :-) –

Verwandte Themen