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;
Collectioniç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), Listyalnızca bir değerinin (bir öğe) olmasıdır.
Bu nedenle, yapılabilecek en iyi şey Listanahtarlardan 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 Listyeni ArrayListbir tane oluşturularak elde edilebilir :SetMap.keySet
List<String> list = new ArrayList<String>(m.keySet());
Bir değerindedir birlikte Listyeni bir oluşturma elde edilebilir ArrayListbir mesafede Collectiontarafından döndürülen Map.valuesbir yöntem:
List<String> list = new ArrayList<String>(m.values());
ListAnahtarların alınmasının sonucu :
elma Bir diğeri Merhaba
ListDeğerlerin alınmasının sonucu :
3.14 eleman Dünya
HashMapbenzer un kriteri ve Mapuygulamalar etkili rastgele olacaktır.
Java 8 Streams API'sını kullanma.
List<Value> values = map.values().stream().collect(Collectors.toList());
map.entrySet()size Map.Entryhem 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 mapkiMap
map.values()Collectionharitanın tüm değerlerini içeren bir değer döndürür .map.keySet()Setharitanı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 Mapa list? En kolayı, arabirimin values()yöntemini çağırmaktır Map. Bu, Collectioniçinde yer alan değer nesnelerini döndürür Map.
Bunun nesne Collectiontarafından desteklendiğini ve Mapnesnede yapılan değişikliklerin Mapburada yansıtılacağını unutmayın. Dolayısıyla, Mapnesnenize bağlı olmayan ayrı bir kopya istiyorsanız , değeri aşağıdaki Listgibi ArrayListiletmek 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 Mapbir içine SortedMapo 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, Mapuygulamanın sağladığı doğal siparişi alırsınız , bu genellikle doğal anahtar siparişinden başka bir şey olabilir (Deneyin Hashtableveya 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());
}