Ausgabe einer Map (K, V) schleifen gesteuert

tplanitz

Erfahrenes Mitglied
Hallo,

kann mir jemand helfen bitte, ich befülle eine Map aus einer bestehenden Liste und füge als Key das Datum mit ein, das funktioniert wunderbar:
PHP:
 // Hier wollen wir den Inhalt von "list1" in die Map schreiben in der List steht [T, h, o, r]
        Map<Date, String> myMap3 = new TreeMap<Date, String>();
        Date myDate3;
        String myString3;
        for (int i=0; i< list1.size();i++) {
             myDate3 = new Date();
             myString3 = (String) list1.get(i);
             myMap3.put(myDate3, myString3);
        System.out.println("In der Map als Key steht = " + myDate3 + " Der Inhalt = " + myString3);
        }

Ich möchte nun in einem anderen Programm Ab-Schritt wieder auf die befüllte Map zugreifen, kann mir jemand sagen was ich tun muß um beide Elemente (Date, String) also Key und Value, auszugeben.
Ich habe es mal so probiert aber das funktioniert leider nicht, ich bekomme immer nur das letzte String value von der map, möchte aber Datum und Value:
PHP:
for (Date mydate: myMap3.keySet()) {
            
            String myString4 = myMap3.get(mydate);
            //Date myDate4 = myMap3.get(mydate);
            System.out.println("In der Map als Key steht = "  + myString4);
            // System.out.println("In der Map als Inhalt steht = " + myDate4);
            
        }

Kann jemand helfen ? Vielen Dank im Voraus
Thorsten
 
Hallo!

Schau mal hier:
Java:
Map<Date, String>map = new TreeMap<Date, String>();
        map.put(new Date(), "Foo");
        map.put(new Date(), "Bar");
        
        for(Map.Entry<Date, String> entry : map.entrySet()){
            System.out.println(entry.getKey() + " -> " + entry.getValue());
        }

Gruß Tom
 
Hallo Tom,
vieln Dank für Deinen Input. Es gab noch ein kleines Thema mit den Key-Werten. Da das DAtum zu schnell eingetragen wurde , hatte ich immer den selben Schlüsselwert und es wurde nur der letzte value ausgegeben, auch leider bei deinem beispiel.
Ich habs jetzt so gemacht und es fuktioniert sehr gut.
Lösung:
PHP:
// In map eintragen, aber key-werte verändern da sonst immer nur der letzte wert ausgegeben wird
       // Daher das Datum um + 1 Sekunde
        Date myDate4;
        String myString4;
        for (int i=0; i< list1.size();i++) {
            myDate4 = new Date();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ignored) {
                
            }
            // Zur Laufzeit ausgeben lassen
            myString4 = (String) list1.get(i);
            myMap3.put(myDate4, myString4);
            System.out.println("In der Map als Key steht = " + myDate4 +
                    " Der Inhalt = " + myString4);
        }
        // Irgenwelcher Programm Code
        //
        // Jetzt schleifengesteuert auslesen, irgendwo im Prog (input Tom)
        for (Map.Entry myEntry: myMap3.entrySet()) {
            System.out.println(myEntry.getKey() + " -> " + myEntry.getValue());
        }

Also vielen Dank und Grüße
 
Hallo!

So würde ich das nicht lösen... dann schon eher kein Date als Key verwenden sondern einen eigenen Typ der eine bessere zeitliche Auflösung bietet:
Java:
/**
 * 
 */
package de.tutorials;

import java.util.Map;
import java.util.TreeMap;

/**
 * @author Tom
 * 
 */
public class GenericsExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Map<Instant, String> map = new TreeMap<Instant, String>();
        Instant instant0 = new Instant();
        map.put(instant0, "Foo");
        Instant instant1 = new Instant();
        map.put(instant1, "Bar");

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

        System.out.println("instant0: " + instant0.getMillis());
        System.out.println("instant1: " + instant1.getMillis());

    }

    static class Instant implements Comparable<Instant> {
        long millis;

        public Instant() {
            this.millis = System.nanoTime();
        }

        public long getMillis() {
            return millis;
        }

        public void setMillis(long millis) {
            this.millis = millis;
        }

        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + (int) (millis ^ (millis >>> 32));
            return result;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            final Instant other = (Instant) obj;
            if (millis != other.millis)
                return false;
            return true;
        }

        @Override
        public String toString() {
            return String.valueOf(this.millis);
        }

        public int compareTo(Instant o) {
            return (int) (this.millis - o.millis);
        }
    }
}

Gruß Tom
 
Hi,

oh... das sieht interessant aus (meine Kentnisse diesbezüglich sind halt sagen wir mal -> embrional), kannst Du mir die 2 zeilen kurz erklären, was die machen?

PHP:
static class Instant implements Comparable<Instant>
-> Du baust hier eine Klasse die was implementiert


PHP:
@Override
-> was ist das ist das free-style oder Java synthax

Sorry für die Fragen, aber möchte nicht dumm sterben...

btw. wie bekomme ich die Java formatierung im Editor , ich finde nur den PHP tag.

Danke für Hilfe

Grüße
 
Zurück