Bir Java Haritas─▒ndaki her giri┼č ├╝zerinde verimli bir ┼čekilde yineleme yapabilir miyim?


Al─▒nan cevaba git


Map Arabirimi Java'da uygulayan bir nesnem varsa ve i├žindeki her ├žifti yinelemeyi arzu edersem, haritadan ge├žmenin en etkili yolu nedir?

├ľ─čelerin s─▒ralamas─▒, aray├╝z i├žin sahip oldu─čum ├Âzel harita uygulamas─▒na ba─čl─▒ m─▒?


3075









Cevap say─▒s─▒n─▒ say: 30






 Map<String, String> map = ...
for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + "/" + entry.getValue());
}
 

4790







Di─čer cevaplar─▒ ├Âzetlemek ve bunlar─▒ bildiklerimle birle┼čtirmek i├žin, bunu yapman─▒n 10 ana yolunu buldum (a┼ča─č─▒ya bak─▒n─▒z). Ayr─▒ca baz─▒ performans testleri yazd─▒m (a┼ča─č─▒daki sonu├žlara bak─▒n). ├ľrne─čin, bir haritan─▒n t├╝m anahtarlar─▒n─▒n ve de─čerlerinin toplam─▒n─▒ bulmak istiyorsak, ┼čunu yazabiliriz:

  1. Yineleyici ve Map.Entry kullanma

     long i = 0;
    Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry<Integer, Integer> pair = it.next();
        i += pair.getKey() + pair.getValue();
    }
     
  2. Kullan─▒lmas─▒ foreach ve Map.Entry

     long i = 0;
    for (Map.Entry<Integer, Integer> pair : map.entrySet()) {
        i += pair.getKey() + pair.getValue();
    }
     
  3. Java 8'den forEach'i kullanma

     final long[] i = {0};
    map.forEach((k, v) -> i[0] += k + v);
     
  4. Kullan─▒lmas─▒ anahtar k├╝mesi ve foreach

     long i = 0;
    for (Integer key : map.keySet()) {
        i += key + map.get(key);
    }
     
  5. KeySet ve yineleyiciyi kullanma

     long i = 0;
    Iterator<Integer> itr2 = map.keySet().iterator();
    while (itr2.hasNext()) {
        Integer key = itr2.next();
        i += key + map.get(key);
    }
     
  6. Kullan─▒lmas─▒ i├žin ve Map.Entry

     long i = 0;
    for (Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator(); entries.hasNext(); ) {
        Map.Entry<Integer, Integer> entry = entries.next();
        i += entry.getKey() + entry.getValue();
    }
     
  7. Java 8 Stream API'sini kullanma

     final long[] i = {0};
    map.entrySet().stream().forEach(e -> i[0] += e.getKey() + e.getValue());
     
  8. Java 8 Stream API'sini paralel kullanma

     final long[] i = {0};
    map.entrySet().stream().parallel().forEach(e -> i[0] += e.getKey() + e.getValue());
     
  9. IterableMap of kullanma Apache Collections

     long i = 0;
    MapIterator<Integer, Integer> it = iterableMap.mapIterator();
    while (it.hasNext()) {
        i += it.next() + it.getValue();
    }
     
  10. Kullan─▒lmas─▒ MutableMap Eclipse (CS) koleksiyonlar─▒n

     final long[] i = {0};
    mutableMap.forEachKeyValue((key, value) -> {
        i[0] += key + value;
    });
     

Performans testleri (mod = Ortalama S├╝re, sistem = Windows 8.1 64 bit, Intel i7-4790 3,60 GHz, 16 GB)

  1. K├╝├ž├╝k bir harita i├žin (100 element), skor 0.308 en iyisidir

     Benchmark                          Mode  Cnt  Score    Error  Units
    test3_UsingForEachAndJava8         avgt  10   0.308 ┬▒  0.021  ┬Ás/op
    test10_UsingEclipseMap             avgt  10   0.309 ┬▒  0.009  ┬Ás/op
    test1_UsingWhileAndMapEntry        avgt  10   0.380 ┬▒  0.014  ┬Ás/op
    test6_UsingForAndIterator          avgt  10   0.387 ┬▒  0.016  ┬Ás/op
    test2_UsingForEachAndMapEntry      avgt  10   0.391 ┬▒  0.023  ┬Ás/op
    test7_UsingJava8StreamApi          avgt  10   0.510 ┬▒  0.014  ┬Ás/op
    test9_UsingApacheIterableMap       avgt  10   0.524 ┬▒  0.008  ┬Ás/op
    test4_UsingKeySetAndForEach        avgt  10   0.816 ┬▒  0.026  ┬Ás/op
    test5_UsingKeySetAndIterator       avgt  10   0.863 ┬▒  0.025  ┬Ás/op
    test8_UsingJava8StreamApiParallel  avgt  10   5.552 ┬▒  0.185  ┬Ás/op
     
  2. 10000 ├Â─čeli bir harita i├žin, puan 37.606 en iyisidir

     Benchmark                           Mode   Cnt  Score      Error   Units
    test10_UsingEclipseMap              avgt   10    37.606 ┬▒   0.790  ┬Ás/op
    test3_UsingForEachAndJava8          avgt   10    50.368 ┬▒   0.887  ┬Ás/op
    test6_UsingForAndIterator           avgt   10    50.332 ┬▒   0.507  ┬Ás/op
    test2_UsingForEachAndMapEntry       avgt   10    51.406 ┬▒   1.032  ┬Ás/op
    test1_UsingWhileAndMapEntry         avgt   10    52.538 ┬▒   2.431  ┬Ás/op
    test7_UsingJava8StreamApi           avgt   10    54.464 ┬▒   0.712  ┬Ás/op
    test4_UsingKeySetAndForEach         avgt   10    79.016 ┬▒  25.345  ┬Ás/op
    test5_UsingKeySetAndIterator        avgt   10    91.105 ┬▒  10.220  ┬Ás/op
    test8_UsingJava8StreamApiParallel   avgt   10   112.511 ┬▒   0.365  ┬Ás/op
    test9_UsingApacheIterableMap        avgt   10   125.714 ┬▒   1.935  ┬Ás/op
     
  3. 100000 ├Â─čeli bir harita i├žin, puan 1184.767 en iyisidir

     Benchmark                          Mode   Cnt  Score        Error    Units
    test1_UsingWhileAndMapEntry        avgt   10   1184.767 ┬▒   332.968  ┬Ás/op
    test10_UsingEclipseMap             avgt   10   1191.735 ┬▒   304.273  ┬Ás/op
    test2_UsingForEachAndMapEntry      avgt   10   1205.815 ┬▒   366.043  ┬Ás/op
    test6_UsingForAndIterator          avgt   10   1206.873 ┬▒   367.272  ┬Ás/op
    test8_UsingJava8StreamApiParallel  avgt   10   1485.895 ┬▒   233.143  ┬Ás/op
    test5_UsingKeySetAndIterator       avgt   10   1540.281 ┬▒   357.497  ┬Ás/op
    test4_UsingKeySetAndForEach        avgt   10   1593.342 ┬▒   294.417  ┬Ás/op
    test3_UsingForEachAndJava8         avgt   10   1666.296 ┬▒   126.443  ┬Ás/op
    test7_UsingJava8StreamApi          avgt   10   1706.676 ┬▒   436.867  ┬Ás/op
    test9_UsingApacheIterableMap       avgt   10   3289.866 ┬▒  1445.564  ┬Ás/op
     

Grafikler (harita boyutuna ba─čl─▒ olarak performans testleri)


Resim tan─▒m─▒n─▒ buraya girin

Tablo (harita boyutuna ba─čl─▒ olarak performans testleri)

           100     600      1100     1600     2100
test10    0.333    1.631    2.752    5.937    8.024
test3     0.309    1.971    4.147    8.147   10.473
test6     0.372    2.190    4.470    8.322   10.531
test1     0.405    2.237    4.616    8.645   10.707
test2     0.376    2.267    4.809    8.403   10.910
test7     0.473    2.448    5.668    9.790   12.125
test9     0.565    2.830    5.952   13.220   16.965
test4     0.808    5.012    8.813   13.939   17.407
test5     0.810    5.104    8.533   14.064   17.422
test8     5.173   12.499   17.351   24.671   30.403
 

T├╝m testler GitHub'da .


1072







Java 8'de yeni lambdas ├Âzelliklerini kullanarak temiz ve h─▒zl─▒ bir ┼čekilde yapabilirsiniz:

  Map<String,String> map = new HashMap<>();
 map.put("SomeKey", "SomeValue");
 map.forEach( (k,v) -> [do something with key and value] );

 // such as
 map.forEach( (k,v) -> System.out.println("Key: " + k + ": Value: " + v));
 

Derleyici taraf─▒ndan t├╝r├╝ k ve v ├ž─▒kar─▒m─▒ yap─▒lacak ve Map.Entry art─▒k kullanmaya gerek yok.

Basit!


272







Evet, sipari┼č belirli Harita uygulamas─▒na ba─čl─▒d─▒r.

@ ScArcher2 daha ┼č─▒k bir Java 1.5 s├Âzdizimine sahip . 1.4'te b├Âyle bir ┼čey yapard─▒m:

 Iterator entries = myMap.entrySet().iterator();
while (entries.hasNext()) {
  Entry thisEntry = (Entry) entries.next();
  Object key = thisEntry.getKey();
  Object value = thisEntry.getValue();
  // ...
}
 

227







Bir harita ├╝zerinde yineleme i├žin tipik kod ┼čudur:

 Map<String,Thing> map = ...;
for (Map.Entry<String,Thing> entry : map.entrySet()) {
    String key = entry.getKey();
    Thing thing = entry.getValue();
    ...
}
 

HashMap kanonik harita uygulamas─▒d─▒r ve garanti vermez (veya ├╝zerinde mutasyon i┼člemi yap─▒lmazsa s─▒ras─▒n─▒ de─či┼čtirmemesi gerekti─či halde). SortedMap giri┼člerin, anahtarlar─▒n do─čal s─▒ralamas─▒na veya Comparator varsa sa─čland─▒─č─▒ s─▒raya g├Âre d├Ând├╝r├╝l├╝r . LinkedHashMap Giri┼člerin giri┼č s─▒ras─▒na ya da giri┼č s─▒ras─▒na g├Âre giri┼č s─▒ras─▒na g├Âre geri g├Ânderilir. EnumMap giri┼čleri do─čal anahtar s─▒ras─▒na g├Âre d├Ând├╝r├╝r.

(G├╝ncelleme: Bunun art─▒k do─čru olmad─▒─č─▒n─▒ d├╝┼č├╝n├╝yorum. ) Not, IdentityHashMap entrySet yineleyici ┼ču anda! 'Daki Map.Entry her ├Â─če i├žin ayn─▒ ├Ârne─či d├Ând├╝ren tuhaf bir uygulamaya sahiptir entrySet . Ancak, her yeni bir yineleyici ilerledik├že Map.Entry , g├╝ncellenir.


124







Yineleyici ve jenerik kullanma ├Ârne─či:

 Iterator<Map.Entry<String, String>> entries = myMap.entrySet().iterator();
while (entries.hasNext()) {
  Map.Entry<String, String> entry = entries.next();
  String key = entry.getKey();
  String value = entry.getValue();
  // ...
}
 

108


2009-08-18





Bu iki b├Âl├╝mden olu┼čan bir soru:

Bir haritan─▒n giri┼čleri ├╝zerinde nas─▒l yinelenir - @ ScArcher2 bunu m├╝kemmel bir ┼čekilde yan─▒tlad─▒ .

Yinelemenin s─▒ras─▒ nedir - sadece kullan─▒yorsan─▒z Map , kesin olarak konu┼čuyorsan─▒z, sipari┼č garantisi yoktur . Yani herhangi bir uygulama taraf─▒ndan verilen s─▒ralamaya ger├žekten g├╝venmemelisiniz. Bununla birlikte, SortedMap aray├╝z Map tam olarak arad─▒─č─▒n─▒z─▒ uzat─▒r ve sa─člar - uygulamalar da s├╝rekli bir s─▒ralama d├╝zeni sa─člar.

NavigableMap Ba┼čka bir yararl─▒ uzant─▒d─▒r - bu, SortedMap anahtar setindeki s─▒ral─▒ konumlar─▒na g├Âre giri┼čleri bulmak i├žin ek y├Ântemlerdir. Yani potansiyel olarak bu ilk etapta yineleme ihtiyac─▒n─▒ kald─▒rabilir - E─čer ├Âzg├╝ bulmak m├╝mk├╝n olabilir entry kulland─▒─č─▒n─▒z pe┼činde higherEntry , lowerEntry , ceilingEntry , veya floorEntry y├Ântemler. Bu descendingMap y├Ântem, size , ge├ži┼č s─▒ras─▒n─▒ tersine ├ževirmenin a├ž─▒k bir y├Ântemini bile verir .


92







Harita ├╝zerinde yineleme yapman─▒n birka├ž yolu vard─▒r.

─░┼čte haritada bir milyon anahtar de─čer ├žiftini depolayarak harita ├╝zerinde depolanan ortak bir veri seti i├žin performanslar─▒n─▒n kar┼č─▒la┼čt─▒r─▒lmas─▒ ve harita ├╝zerinde yinelenmesi.

1) entrySet() Her d├Âng├╝ i├žin kullanma

 for (Map.Entry<String,Integer> entry : testMap.entrySet()) {
    entry.getKey();
    entry.getValue();
}
 

50 milisaniye

2) keySet() Her d├Âng├╝ i├žin kullanma

 for (String key : testMap.keySet()) {
    testMap.get(key);
}
 

76 milisaniye

3) kullanma entrySet() ve yineleyici

 Iterator<Map.Entry<String,Integer>> itr1 = testMap.entrySet().iterator();
while(itr1.hasNext()) {
    Map.Entry<String,Integer> entry = itr1.next();
    entry.getKey();
    entry.getValue();
}
 

50 milisaniye

4) kullanma keySet() ve yineleyici

 Iterator itr2 = testMap.keySet().iterator();
while(itr2.hasNext()) {
    String key = itr2.next();
    testMap.get(key);
}
 

75 milisaniye

Ben bahsettim this link .


74







Bunu yapman─▒n do─čru yolu, kabul edilen cevab─▒ en verimli oldu─ču gibi kullanmakt─▒r. A┼ča─č─▒daki kodu biraz daha temiz g├Âr├╝n├╝yor.

 for (String key: map.keySet()) {
   System.out.println(key + "/" + map.get(key));
}
 

53







Bilginize, kullanabilirsiniz map.keySet() ve map.values() e─čer yaln─▒zca haritan─▒n anahtarlar─▒ / de─čerleri ile ilgileniyorsan─▒z di─čerini de─čil.


52







─░le Eclipse Koleksiyon (eski GS Koleksiyonlar─▒ ), ├╝zerinde forEachKeyValue y├Ântemini kullan─▒rs─▒n─▒z MapIterable MutableMap ve ImmutableMap aray├╝zleri ve bunlar─▒n uygulamalar─▒ ile devral─▒nan aray├╝z├╝.

 final MutableBag<String> result = Bags.mutable.empty();
MutableMap<Integer, String> map = Maps.mutable.of(1, "One", 2, "Two", 3, "Three");
map.forEachKeyValue(new Procedure2<Integer, String>()
{
    public void value(Integer key, String value)
    {
        result.add(key + value);
    }
});
Assert.assertEquals(Bags.mutable.of("1One", "2Two", "3Three"), result);
 

Java 8 lambda s├Âzdizimi ile kodu a┼ča─č─▒daki gibi yazabilirsiniz:

 MutableBag<String> result = Bags.mutable.empty();
MutableMap<Integer, String> map = Maps.mutable.of(1, "One", 2, "Two", 3, "Three");
map.forEachKeyValue((key, value) -> result.add(key + value));
Assert.assertEquals(Bags.mutable.of("1One", "2Two", "3Three"), result);
 

Not: Eclipse Koleksiyonlar i├žin bir yorumcuyum.


33







Teoride, en etkili yol, haritan─▒n hangi uygulanmas─▒na ba─čl─▒ olacakt─▒r. Bunu yapman─▒n resmi yolu , her biri bir anahtar ve bir de─čer ( ve ) i├žeren bir map.entrySet() dizi d├Ând├╝ren ├ža─čr─▒ yapmakt─▒r . Map.Entry entry.getKey() entry.getValue()

─░diyosenkrazik uygulamada, baz─▒ kullanmak ister fark yaratabilir map.keySet() , map.entrySet() ya da ba┼čka bir ┼čey. Ama kimsenin b├Âyle yazmas─▒ i├žin bir sebep d├╝┼č├╝nemiyorum. B├╝y├╝k olas─▒l─▒kla yapt─▒─č─▒n─▒z performansta hi├žbir fark yaratmaz.

Ve evet, s─▒ra, uygulamaya (ayr─▒ca) ekleme s─▒ras─▒n─▒n ve di─čer kontrol edilmesi zor fakt├Ârlerin s─▒ras─▒na ba─čl─▒ olacakt─▒r.

[de─či┼čtir] Ben asl─▒nda yazd─▒m valueSet() ama elbette entrySet() cevap asl─▒nda.


30







Lambda ─░fade Java 8

Java 1.8'de (Java 8) , Yinelenebilir Arabirimdeki yineleyicilere benzeyen Toplam i┼člemlerden ( Ak─▒┼č i┼člemleri ) forEach y├Ântemini kullanarak bu ├žok daha kolay hale geldi .

Sadece koduna a├ž─▒klamada alt─▒nda yap─▒┼čt─▒r─▒n ve yeniden adland─▒rmak kopya HashMap de─či┼čkeni hm anahtar-de─čer ├žifti d─▒┼čar─▒ yazd─▒rmak i├žin HashMap de─či┼čkene.

 HashMap<Integer,Integer> hm = new HashMap<Integer, Integer>();
/*
 *     Logic to put the Key,Value pair in your HashMap hm
 */

// Print the key value pair in one line.

hm.forEach((k, v) -> System.out.println("key: " + k + " value:" + v));

// Just copy and paste above line to your code.
 

Lambda ─░fade kullanmaya ├žal─▒┼čt─▒─č─▒m ├Ârnek kod a┼ča─č─▒dad─▒r . Bu ┼čey ├žok g├╝zel. Denemek gerekir.

 HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
    Random rand = new Random(47);
    int i = 0;
    while(i < 5) {
        i++;
        int key = rand.nextInt(20);
        int value = rand.nextInt(50);
        System.out.println("Inserting key: " + key + " Value: " + value);
        Integer imap = hm.put(key, value);
        if( imap == null) {
            System.out.println("Inserted");
        } else {
            System.out.println("Replaced with " + imap);
        }               
    }

    hm.forEach((k, v) -> System.out.println("key: " + k + " value:" + v));

Output:

Inserting key: 18 Value: 5
Inserted
Inserting key: 13 Value: 11
Inserted
Inserting key: 1 Value: 29
Inserted
Inserting key: 8 Value: 0
Inserted
Inserting key: 2 Value: 7
Inserted
key: 1 value:29
key: 18 value:5
key: 2 value:7
key: 8 value:0
key: 13 value:11
 

Ayr─▒ca bir Spliterator'─▒ da ayn─▒ ┼čekilde kullanabilirsiniz .

 Spliterator sit = hm.entrySet().spliterator();
 

G├ťNCELLE┼×T─░RME


Oracle Docs'a dok├╝mantasyon ba─člant─▒lar─▒ dahil. Lambda hakk─▒nda daha fazla bilgi i├žin bu ba─člant─▒ya gidin ve Toplam ─░┼člemleri okumak ve Spliterator i├žin bu ba─člant─▒ya gitmek gerekir .


30







Java 8

forEach Bir lambda ifadesi kabul eden bir y├Ântemimiz var . Ayr─▒ca ak─▒┼č API'lar─▒m─▒z da var . Bir harita d├╝┼č├╝n├╝n:

 Map<String,String> sample = new HashMap<>();
sample.put("A","Apple");
sample.put("B", "Ball");
 

Anahtarlar ├╝zerinde yineleme:

 sample.keySet().forEach((k) -> System.out.println(k));
 

De─čerlerin ├╝zerinde yineleme:

 sample.values().forEach((v) -> System.out.println(v));
 

Giri┼čler ├╝zerinde yineleme (forEach ve Streams'─▒ kullanma):

 sample.forEach((k,v) -> System.out.println(k + ":" + v)); 
sample.entrySet().stream().forEach((entry) -> {
            Object currentKey = entry.getKey();
            Object currentValue = entry.getValue();
            System.out.println(currentKey + ":" + currentValue);
        });
 

Akarsular─▒n avantaj─▒, istedi─čimiz durumda kolayca paralelle┼čtirilebilmeleridir. Sadece yukar─▒dakilerin parallelStream() yerine kullanmam─▒z gerekiyor stream() .

forEachOrdered forEach ak─▒┼člar─▒ ile vs ? forEach (Tan─▒ml─▒ ise) kar┼č─▒la┼čma talimat─▒na uymaya olarak do─čada do─čal olarak belirli olmayan vermezse forEachOrdered yok. Bu y├╝zden forEach emrin tutulaca─č─▒n─▒ garanti etmiyor. Bunu daha fazlas─▒ i├žin de kontrol edin .


29







Java 8:

Lamda ifadelerini kullanabilirsiniz:

 myMap.entrySet().stream().forEach((entry) -> {
    Object currentKey = entry.getKey();
    Object currentValue = entry.getValue();
});
 

Daha fazla bilgi i├žin bunu takip edin .


28







Bunu Java 1.4 ile deneyin:

 for( Iterator entries = myMap.entrySet().iterator(); entries.hasNext();){

  Entry entry = (Entry) entries.next();

  System.out.println(entry.getKey() + "/" + entry.getValue());

  //...
}
 

27







─░le Java 8

 map.forEach((k, v) -> System.out.println((k + ":" + v)));
 

27







Harita'da ki┼či ├╝zerinde keys ve / veya values ve / veya ├╝zerinde yineleme yapabilir. both (e.g., entrySet)

1.) keys -> keySet() Haritan─▒n i├žinden yineleyin :

 Map<String, Object> map = ...;

for (String key : map.keySet()) {
    //your Business logic...
}
 

2.) values -> values() Haritan─▒n i├žinden ge├ženleri tekrarlay─▒n :

 for (Object value : map.values()) {
    //your Business logic...
}
 

3.) both -> entrySet() Haritan─▒n i├žinden ge├ženleri tekrarlay─▒n :

 for (Map.Entry<String, Object> entry : map.entrySet()) {
    String key = entry.getKey();
    Object value = entry.getValue();
    //your Business logic...
}
 

Dahas─▒, bir HashMap'te yineleme yapman─▒n 3 farkl─▒ yolu vard─▒r. A┼ča─č─▒daki gibidir _

 //1.
for (Map.Entry entry : hm.entrySet()) {
    System.out.print("key,val: ");
    System.out.println(entry.getKey() + "," + entry.getValue());
}

//2.
Iterator iter = hm.keySet().iterator();
while(iter.hasNext()) {
    Integer key = (Integer)iter.next();
    String val = (String)hm.get(key);
    System.out.println("key,val: " + key + "," + val);
}

//3.
Iterator it = hm.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry entry = (Map.Entry) it.next();
    Integer key = (Integer)entry.getKey();
    String val = (String)entry.getValue();
    System.out.println("key,val: " + key + "," + val);
}
 

24







Java 8 ile en kompakt olan─▒:

 map.entrySet().forEach(System.out::println);
 

20







 public class abcd{
    public static void main(String[] args)
    {
       Map<Integer, String> testMap = new HashMap<Integer, String>();
        testMap.put(10, "a");
        testMap.put(20, "b");
        testMap.put(30, "c");
        testMap.put(40, "d");
        for (Integer key:testMap.keySet()) {
            String value=testMap.get(key);
            System.out.println(value);
        }
    }
}
 

VEYA

 public class abcd {
    public static void main(String[] args)
    {
       Map<Integer, String> testMap = new HashMap<Integer, String>();
        testMap.put(10, "a");
        testMap.put(20, "b");
        testMap.put(30, "c");
        testMap.put(40, "d");
        for (Entry<Integer, String> entry : testMap.entrySet()) {
            Integer key=entry.getKey();
            String value=entry.getValue();
        }
    }
}
 

19







Genel bir t├╝retilmemi┼č Harita varsa, ┼čunlar─▒ kullanabilirsiniz:

 Map map = new HashMap();
for (Map.Entry entry : ((Set<Map.Entry>) map.entrySet())) {
    System.out.println(entry.getKey() + "/" + entry.getValue());
}
 

19







     Iterator iterator = map.entrySet().iterator();
    while (iterator.hasNext()) {
        Map.Entry element = (Map.Entry)it.next();
        LOGGER.debug("Key: " + element.getKey());
        LOGGER.debug("value: " + element.getValue());    
    }
 

13







Generics kullanarak yapabilirsiniz:

 Map<Integer, Integer> map = new HashMap<Integer, Integer>();
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
    Map.Entry<Integer, Integer> entry = entries.next();
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
 

12







Java 8'i kullan─▒n:

 map.entrySet().forEach(entry -> System.out.println(entry.getValue()));
 

11







Sipari┼č her zaman belirli harita uygulamas─▒na ba─čl─▒ olacakt─▒r. Java 8'i kullanarak ┼čunlardan birini kullanabilirsiniz:

 map.forEach((k,v) -> { System.out.println(k + ":" + v); });
 

Veya:

 map.entrySet().forEach((e) -> {
            System.out.println(e.getKey() + " : " + e.getValue());
        });
 

Sonu├ž ayn─▒ olacakt─▒r (ayn─▒ s─▒rada). Giri┼čSet harita taraf─▒ndan desteklenir, b├Âylece ayn─▒ sipari┼či al─▒rs─▒n─▒z. ─░kincisi, lambda kullanman─▒za izin verdi─či i├žin kullan─▒┼čl─▒d─▒r, ├Ârne─čin yaln─▒zca 5'ten b├╝y├╝k Integer nesnelerini yazd─▒rmak istiyorsan─▒z:

 map.entrySet()
    .stream()
    .filter(e-> e.getValue() > 5)
    .forEach(System.out::println);
 

A┼ča─č─▒daki kod LinkedHashMap ve normal HashMap (├Ârnek) ├╝zerinden yineleme g├Âsterir. S─▒radaki fark─▒ g├Âreceksiniz:

 public class HMIteration {


    public static void main(String[] args) {
        Map<Object, Object> linkedHashMap = new LinkedHashMap<>();
        Map<Object, Object> hashMap = new HashMap<>();

        for (int i=10; i>=0; i--) {
            linkedHashMap.put(i, i);
            hashMap.put(i, i);
        }

        System.out.println("LinkedHashMap (1): ");
        linkedHashMap.forEach((k,v) -> { System.out.print(k + " (#="+k.hashCode() + "):" + v + ", "); });

        System.out.println("\nLinkedHashMap (2): ");

        linkedHashMap.entrySet().forEach((e) -> {
            System.out.print(e.getKey() + " : " + e.getValue() + ", ");
        });


        System.out.println("\n\nHashMap (1): ");
        hashMap.forEach((k,v) -> { System.out.print(k + " (#:"+k.hashCode() + "):" + v + ", "); });

        System.out.println("\nHashMap (2): ");

        hashMap.entrySet().forEach((e) -> {
            System.out.print(e.getKey() + " : " + e.getValue() + ", ");
        });
    }
}
 

LinkedHashMap (1):

10 (# = 10): 10, 9 (# = 9): 9, 8 (# = 8): 8, 7 (# = 7): 7, 6 (# = 6): 6, 5 (# = 5) ): 5, 4 (# = 4): 4, 3 (# = 3): 3, 2 (# = 2): 2, 1 (# = 1): 1, 0 (# = 0): 0,

LinkedHashMap (2):

10: 10, 9: 9, 8: 8, 7: 7, 6: 6, 5: 5, 4: 4, 3: 3, 2: 2, 1: 1, 0: 0,

HashMap (1):

0 (#: 0): 0, 1 (#: 1): 1, 2 (#: 2): 2, 3 (#: 3): 3, 4 (#: 4): 4, 5 (#: 5) ): 5, 6 (#: 6): 6, 7 (#: 7): 7, 8 (#: 8): 8, 9 (#: 9): 9, 10 (#: 10): 10,

HashMap (2):

0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10,


10







            //Functional Oprations
            Map<String, String> mapString = new HashMap<>();
            mapString.entrySet().stream().map((entry) -> {
                String mapKey = entry.getKey();
                return entry;
            }).forEach((entry) -> {
                String mapValue = entry.getValue();
            });

            //Intrator
            Map<String, String> mapString = new HashMap<>();
            for (Iterator<Map.Entry<String, String>> it = mapString.entrySet().iterator(); it.hasNext();) {
                Map.Entry<String, String> entry = it.next();
                String mapKey = entry.getKey();
                String mapValue = entry.getValue();
            }

            //Simple for loop
            Map<String, String> mapString = new HashMap<>();
            for (Map.Entry<String, String> entry : mapString.entrySet()) {
                String mapKey = entry.getKey();
                String mapValue = entry.getValue();

            }
 

9







Bir Harita ├╝zerindeki etkili yinelemeli ├ž├Âz├╝m, Java 5 - Java 7 aras─▒ndaki "her biri i├žin" d├Âng├╝d├╝r. ─░┼čte:

 for (String key : phnMap.keySet()) {
    System.out.println("Key: " + key + " Value: " + phnMap.get(key));
}
 

Java 8'den bir Harita ├╝zerinde yineleme yapmak i├žin bir lambda ifadesi kullanabilirsiniz. Geli┼čmi┼č bir 'forEach'

 phnMap.forEach((k,v) -> System.out.println("Key: " + k + " Value: " + v));
 

E─čer lambda i├žin bir ko┼čullu yazmak istiyorsan─▒z, a┼ča─č─▒daki gibi yazabilirsiniz:

 phnMap.forEach((k,v)->{
    System.out.println("Key: " + k + " Value: " + v);
    if("abc".equals(k)){
        System.out.println("Hello abc");
    }
});
 

9







Evet, bir├žok insan─▒n kabul etti─či gibi, bunun ├╝zerinde yinelemenin en iyi yoludur Map .

Ancak nullpointerexception harita varsa atma ┼čans─▒ vard─▒r null . null Kontrol etmeyi unutma .

                                                  |
                                                 |
                                         - - - -
                                       |
                                       |
for (Map.Entry<String, Object> entry : map.entrySet()) {
    String key = entry.getKey();
    Object value = entry.getValue();
}
 

8







 package com.test;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class Test {

    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("ram", "ayodhya");
        map.put("krishan", "mathura");
        map.put("shiv", "kailash");

        System.out.println("********* Keys *********");
        Set<String> keys = map.keySet();
        for (String key : keys) {
            System.out.println(key);
        }

        System.out.println("********* Values *********");
        Collection<String> values = map.values();
        for (String value : values) {
            System.out.println(value);
        }

        System.out.println("***** Keys and Values (Using for each loop) *****");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println("Key: " + entry.getKey() + "\t Value: "
                    + entry.getValue());
        }

        System.out.println("***** Keys and Values (Using while loop) *****");
        Iterator<Entry<String, String>> entries = map.entrySet().iterator();
        while (entries.hasNext()) {
            Map.Entry<String, String> entry = (Map.Entry<String, String>) entries
                    .next();
            System.out.println("Key: " + entry.getKey() + "\t Value: "
                    + entry.getValue());
        }

        System.out
                .println("** Keys and Values (Using java 8 using lambdas )***");
        map.forEach((k, v) -> System.out
                .println("Key: " + k + "\t value: " + v));
    }
}
 

7







Bunu yapman─▒n pek ├žok yolu var. A┼ča─č─▒da birka├ž basit ad─▒m verilmi┼čtir:

Diyelim ki ┼č├Âyle bir Haritan─▒z var:

 Map<String, Integer> m = new HashMap<String, Integer>();
 

Daha sonra harita ├Â─čeleri ├╝zerinde yineleme yapmak i├žin a┼ča─č─▒dakine benzer bir ┼čey yapabilirsiniz.

 // ********** Using an iterator ****************
Iterator<Entry<String, Integer>> me = m.entrySet().iterator();
while(me.hasNext()){
    Entry<String, Integer> pair = me.next();
    System.out.println(pair.getKey() + ":" + pair.getValue());
}

// *********** Using foreach ************************
for(Entry<String, Integer> me : m.entrySet()){
    System.out.println(me.getKey() + " : " + me.getValue());
}

// *********** Using keySet *****************************
for(String s : m.keySet()){
    System.out.println(s + " : " + m.get(s));
}

// *********** Using keySet and iterator *****************
Iterator<String> me = m.keySet().iterator();
while(me.hasNext()){
    String key = me.next();
    System.out.println(key + " : " + m.get(key));
}
 

7



─░lgili yay─▒nlar


Bir dize kelimelerini nas─▒l yineleyebilirim?

Bash'deki de─či┼čkenler taraf─▒ndan tan─▒mlanan bir dizi say─▒ ├╝zerinde nas─▒l yinelenirim?

Java'da bir enum ├╝zerinden yinelenecek bir 'for' d├Âng├╝s├╝

Java'da bir liste ├╝zerinde yineleme yapman─▒n yollar─▒

Bir JSON yap─▒s─▒ ├╝zerinde nas─▒l yinelenirim? [├žift]

Bir NSArray ├╝zerinde nas─▒l yinelenirim?

Python'da s─▒ral─▒ anahtar s─▒ras─▒na g├Âre bir s├Âzl├╝─č├╝ nas─▒l yineleyebilirim?

Java'daki bir dizindeki dosyalar aras─▒nda nas─▒l yinelenirim?

PHP'de bir dizgede her sat─▒r─▒n ├╝zerinde yineleme

MATLAB'deki n-boyutlu bir matristeki her bir eleman─▒ nas─▒l yineleyebilirim?

Etiketle ilgili di─čer sorular [java]


Git'i kullanarak bir etiketi uzak bir havuza nas─▒l iter?

Git ad─▒nda bir stash nas─▒l adland─▒r─▒l─▒r ve al─▒n─▒r?

Kayd─▒rma ├žubu─čunu gizle, ancak yine de kayd─▒rma yapabilirken

Event.stopPropagation ve event.preventDefault aras─▒ndaki fark nedir?

Python'da yeni bir s├Âzl├╝k olu┼čturma

Windows'ta bir servisi nas─▒l silebilirim?

Entegre y├Ânetilen boru hatt─▒ modunda ge├žerli olmayan bir ASP.NET ayar─▒ tespit edildi

'Cut' komutunun ayn─▒ s─▒ral─▒ s─▒n─▒rland─▒r─▒c─▒lara ayn─▒ ┼čekilde davranmas─▒ nas─▒l sa─član─▒r?

Chrome'da yazd─▒r─▒rken href de─čerlerini kald─▒rman─▒z gerekir

Python'da neden tuple anlama yok?