Bir dönüştürmek için en iyi yolu nedir Map<key,value>
a List<value>
? Sadece tüm değerleri tekrarlayın ve bir listeye ekleyin ya da bir şey mi görüyorum?
Bir dönüştürmek için en iyi yolu nedir Map<key,value>
a List<value>
? Sadece tüm değerleri tekrarlayın ve bir listeye ekleyin ya da bir şey mi görüyorum?
Yanıtlar:
List<Value> list = new ArrayList<Value>(map.values());
varsayarak:
Map<Key,Value> map;
Collection
için List
çalışacak.
keySet()
ve values()
genellikle altta yatan yapının bir Küme veya Koleksiyon görünümünü veren şim nesneleridir ( keySet()
çiftleri vurgulamak için bir Küme döndürür). İçin values()
, döndürülen nesne olabilir bir olmak List
, ama çoğu olmayacaktır. Söylediğiniz gibi gerçek bir Liste oluşturmak, orijinal Haritaya artık bağımlı olmadığınız anlamına gelen bağlantıyı keser. Bazen de, sadece bir Listeye ihtiyacınız vardır, çünkü bazı
Buradaki sorun Map
, iki değerinin (bir anahtar ve değer), List
yalnızca bir değerinin (bir öğe) olmasıdır.
Bu nedenle, yapılabilecek en iyi şey List
anahtarlardan birini veya değerleri almaktır. (Anahtar / değer çiftini tutmak için bir sarıcı yapmadığımız sürece).
Diyelim ki Map
:
Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");
A olarak anahtarlar , yöntem tarafından döndürülenlerden List
yeni ArrayList
bir tane oluşturularak elde edilebilir :Set
Map.keySet
List<String> list = new ArrayList<String>(m.keySet());
Bir değerindedir birlikte List
yeni bir oluşturma elde edilebilir ArrayList
bir mesafede Collection
tarafından döndürülen Map.values
bir yöntem:
List<String> list = new ArrayList<String>(m.values());
List
Anahtarların alınmasının sonucu :
elma Bir diğeri Merhaba
List
Değerlerin alınmasının sonucu :
3.14 eleman Dünya
HashMap
benzer un kriteri ve Map
uygulamalar etkili rastgele olacaktır.
Java 8 Streams API'sını kullanma.
List<Value> values = map.values().stream().collect(Collectors.toList());
map.entrySet()
size Map.Entry
hem anahtar hem de değer içeren bir nesne koleksiyonu sunar . daha sonra bunu istediğiniz gibi herhangi bir koleksiyon nesnesine dönüştürebilirsiniz new ArrayList(map.entrySet())
;
ne listesi?
Varsayalım map
kiMap
map.values()
Collection
haritanın tüm değerlerini içeren bir değer döndürür .map.keySet()
Set
haritanın tüm anahtarlarını içeren bir döndürür .Sana içerdiği değerleri dönüştürmek istediğiniz tahmin Map
a list
? En kolayı, arabirimin values()
yöntemini çağırmaktır Map
. Bu, Collection
içinde yer alan değer nesnelerini döndürür Map
.
Bunun nesne Collection
tarafından desteklendiğini ve Map
nesnede yapılan değişikliklerin Map
burada yansıtılacağını unutmayın. Dolayısıyla, Map
nesnenize bağlı olmayan ayrı bir kopya istiyorsanız , değeri aşağıdaki List
gibi ArrayList
iletmek gibi yeni bir nesne oluşturmanız yeterlidir Collection
.
ArrayList<String> list = new ArrayList<String>(map.values());
Böyle yapabilirsin
List<Value> list = new ArrayList<Value>(map.values());
Sonuçtaki değerlerin List<Value>
girişin anahtar sıralamasında olduğundan emin olmak istiyorsanız Map<Key, Value>
, "geçmeniz" gerekirSortedMap
.
Ya başlamak somut olan SortedMap
(Mesela uygulanması TreeMap
) ya da girişinizi eklemek Map
bir içine SortedMap
o dönüştürmeden önce List
. Örneğin:
Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));
Aksi takdirde, Map
uygulamanın sağladığı doğal siparişi alırsınız , bu genellikle doğal anahtar siparişinden başka bir şey olabilir (Deneyin Hashtable
veya ConcurrentHashMap
çeşitlilik için).
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("java", 20);
map.put("C++", 45);
Set <Entry<String, Integer>> set = map.entrySet();
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);
Listede hem anahtar hem de değer çiftine sahip olabiliriz.Ayrıca liste üzerinden yineleyerek Map.Entry kullanarak anahtar ve değer alabilirsiniz.
// you can use this
List<Value> list = new ArrayList<Value>(map.values());
// or you may use
List<Value> list = new ArrayList<Value>();
for (Map.Entry<String, String> entry : map.entrySet())
{
list.add(entry.getValue());
}
"Map<String , String > map = new HapshMap<String , String>;
map.add("one","java");
map.add("two" ,"spring");
Set<Entry<String,String>> set = map.entrySet();
List<Entry<String , String>> list = new ArrayList<Entry<String , String>> (set);
for(Entry<String , String> entry : list ) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
} "
İşte değerleri haritadan almanın genel yöntemi.
public static <T> List<T> ValueListFromMap(HashMap<String, T> map) {
List<T> thingList = new ArrayList<>();
for (Map.Entry<String, T> entry : map.entrySet()) {
thingList.add(entry.getValue());
}
return thingList;
}
HashMap<Integer, List<String>> map = new HashMap<>();
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("Primefaces");
list.add("JSF");
map.put(1,list);
if(map != null){
return new ArrayList<String>((Collection<? extends String>) map.values());
}