USB
USB

Reputation: 6139

How to iterate through objects in Hashmap

I am having

Map<String, List<Attribute>> binList = new HashMap<String, List<Attribute>>();

I want to iterate through each values in list By doing this I am able to get the key and its entire values.But how to get each single value for a key.

BinList {3=[index=0 {from=1.3,to=2.42}, index=1 {from=2.42,to=3.54}, index=2 {from=3.54,to=4.66}, index=3 {from=4.66,to=5.78}, index=4 {from=5.78,to=6.9}], 2=[index=0 {from=2.3,to=2.76}, index=1 {from=2.76,to=3.2199999999999998}, index=2 {from=3.2199999999999998,to=3.6799999999999997}, index=3 {from=3.6799999999999997,to=4.14}, index=4 {from=4.14,to=4.6}], 1=[index=0 {from=4.3,to=5.02}, index=1 {from=5.02,to=5.739999999999999}, index=2 {from=5.739999999999999,to=6.459999999999999}, index=3 {from=6.459999999999999,to=7.179999999999999}, index=4 {from=7.179999999999999,to=7.899999999999999}], 4=[index=0 {from=0.3,to=0.76}, index=1 {from=0.76,to=1.2200000000000002}, index=2 {from=1.2200000000000002,to=1.6800000000000002}, index=3 {from=1.6800000000000002,to=2.14}, index=4 {from=2.14,to=2.6}]}



Map<String, List<Attribute>> binList = new HashMap<String, List<Attribute>>();
System.out.println("BinList "+binList);
//Iterating binList
while (it.hasNext()) {
    Map.Entry pairs = (Map.Entry)it.next();
    System.out.println("->>>>"+pairs.getKey() + " = " + pairs.getValue());
    }

OUTPUT

->>>>3 = [index=0 {from=1.3,to=2.42}, index=1 {from=2.42,to=3.54}, index=2 {from=3.54,to=4.66}, index=3 {from=4.66,to=5.78}, index=4 {from=5.78,to=6.9}]
->>>>2 = [index=0 {from=2.3,to=2.76}, index=1 {from=2.76,to=3.2199999999999998}, index=2 {from=3.2199999999999998,to=3.6799999999999997}, index=3 {from=3.6799999999999997,to=4.14}, index=4 {from=4.14,to=4.6}]
->>>>1 = [index=0 {from=4.3,to=5.02}, index=1 {from=5.02,to=5.739999999999999}, index=2 {from=5.739999999999999,to=6.459999999999999}, index=3 {from=6.459999999999999,to=7.179999999999999}, index=4 {from=7.179999999999999,to=7.899999999999999}]
->>>>4 = [index=0 {from=0.3,to=0.76}, index=1 {from=0.76,to=1.2200000000000002}, index=2 {from=1.2200000000000002,to=1.6800000000000002}, index=3 {from=1.6800000000000002,to=2.14}, index=4 {from=2.14,to=2.6}]

How to iterate through values

id =3
   index=0 {from=1.3,to=2.42}
   index=1 {from=2.42,to=3.54}
.
.

Upvotes: 0

Views: 6297

Answers (2)

Brian Roach
Brian Roach

Reputation: 76898

You have a Map that contains values that are instances of List<Attribute>.

If you want to iterate though those lists and display their contents... you'd need to iterate through those lists;

for (Map.Entry<String, List<Attribute>> entry : binList.entrySet())
{
    System.out.println("Key: " + entry.getKey());

    // Each value is a List<Attribute>, so you can iterate though that as well
    for (Attribute a : entry.getValue())
    {
        // This assumes Attribute.toString() prints something useful 
        System.out.println("Attribute: " + a);
    }
}

Edit to add: You show an Iterator in your example, and you're using raw types instead of generics. The above does away with the Iterator but presumably this is the correct version of what you were trying to do using Iterators. The "for-each" loops shown above are equivalent:

Iterator<Map.Entry<String, List<Attribute>>> it = binList.entrySet().iterator();
while (it.hasNext())
{
    Map.Entry<String, List<Attribute>> entry = it.next();
    System.out.println("Key: " + entry.getKey());

    // Each value is a List<Attribute>, so you can iterate though that as well
    Iterator<Attribute> it2 = entry.getValue().iterator();

    while (it2.hasNext())
    {
        Attribute a = it2.next();
        // This assumes Attribute.toString() prints something useful 
        System.out.println("Attribute: " + a);
    }
}

Upvotes: 7

user3309783
user3309783

Reputation: 75

try with foreach style in java

for (String entryKey:binList.keySet()){
    for (List<Attribute> attribute:binList.get(entryKey)){
        attribute.from
        attribute.to
    }
}

Upvotes: 1

Related Questions