Ergebnis nur einmal anzeigen lassen

patges

Mitglied
Beim auslesen von Daten nach bestimmen (vorher angegebenen) IDs bekomme ich zu der gesuchten ID jeweils zwei Werte "WertA" und "WertB". Leider kommt es sehr oft vor, das diese IDs mehrfach vorkommen, also auch mehrfach mit den gleichen dazugehörigen Werten "A" und "B" angezeigt werden. Wie kann ich mittels Java "einstellen" das zu der gesuchten ID jeweils nur einmal das Ergebnis aus "WertA" und "WertB" angezeigt wird


Bisher sieht das Ergebnis so aus:

ID WertA WertB

1 10 20
2 22 33
2 22 33
3 11 05
4 09 99
5 44 55
5 44 55

Und ich möchte dieses Ergebnis haben:

ID WertA WertB

1 10 20
2 22 33
3 11 05
4 09 99
5 44 55


Danke und Gruß patges
 
Von wo stammen denn die Daten?

Wenn Du diese über ein SQL-Query aus einer DB ausliest, kannst Du einfach das Wort DISTINCT in's Query einfügen.

Etwa so:
Code:
SELECT DISTINCT * FROM tbl
Gruss
ben
 
Ne leider keine SQL-Datenbank das wäre zu einfach, ich lese ne MAP aus, und hab im Moment keinen Plan wie ich da vorgehen soll!


Greetz patges
 
Hallo!

Schau mal hier:
Code:
 /**
  * 
  */
 package de.tutorials;
 
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.TreeSet;
 
 /**
  * @author Tom
  * 
  */
 public class SimpleMapExample {
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		Map map = new HashMap();
 		map.put("1", "10 20");
 		map.put("2", "22 33");
 		map.put("2", "22 33");
 		map.put("3", "11 05");
 		map.put("4", "09 99");
 		map.put("5", "44 55");
 		map.put("5", "44 55");
 
 		for (Iterator iter = new TreeSet(map.keySet()).iterator(); iter
 				.hasNext();) {
 			String key = (String) iter.next();
 			String value = (String) map.get(key);
 			System.out.println("key: " + key + " value: " + value);
 		}
 	}
 
 }

Gruss Tom
 
Das sieht schonmal gar nicht so schlecht aus, allerdings werden die drei Werte auf einem HUI in einer Tabelle ausgegeben, und das was ich möchte ist, dass Jede ID nur einmal mit ihren dazugehörigen Werten auftaucht, wenn ich den Quelltext wirklich in dieser Form:

Code:
public static void main(String[] args) {
 		Map map = new HashMap();
 		map.put("1", "10 20");
 		map.put("2", "22 33");
 		map.put("2", "22 33");
 		map.put("3", "11 05");
 		map.put("4", "09 99");
 		map.put("5", "44 55");
 		map.put("5", "44 55");

schreiben würde, dann bräuchte ich für den Quelltext schätzungsweise 23 Wochen ;)


Was ich möchte ist, dass zu jeder ID nur einmal "WertA" und einmal "WertB" angegeben wird, und nicht wie es bisher ist, dass manche IDs doppelt auftauchen!!


Danke und Greetz patges
 
Hi!

Hm ... ich bin mir nicht sicher, aber können in einer Map die Key s überhaupt doppelt vorkommen ich denke nicht, würde ja keinen Sinn machen ...

Von wo willst du denn die Daten einlesen? Aus einer Textdatei? Folge dem Rat von -ben- und poste mal deinen Code, ich kann mir da jetzt nicht wirklich was drunter vorstellen :-)

Gruß
TOM
 
Hallo nur mal so eine frage:

eine ID sprich ein identifier sollte eigentlich immer eindeutig sein, sonst macht es eigentlich keinen sinn. Ausserdem speicherst du in deinem vorhaben daten doppelt, warum?

z.b.: 2 22 30
Inwiefern macht das einen Sinn?

Gruss,
Torsten
 
@patges:

Nein! :)
Du sollst die Werte ja auch nicht händisch in die Map putten (grausliches deutsch, ich weiß), sondern programmatisch aus deiner Quelle lesen.

Also ungefähr so:

Code:
  while(noch_was_in_quelle) {
   
       map.put(key, krams_aus_quelle);
     
   }

Mit der so gefüllten Map verfährst du weiter, wie Thomas das in seinem Code-Fragment gezeigt hat, und - voilà - schon sind die Dupletten weg.

Schönen Abend noch

Alexander Schell
 
Zuletzt bearbeitet:
So, hab hier mal nen ersten erstellen Code :

Code:
  void doppelfilter( List aList, Map abc) {

     // Ergebnis nehmen und prüfen ob Wert bereits enthalten ist
     // import java.util.Iterator;
     if (aList == null){
       return;
     }

     ListIterator iterator = aList.iterator();
     while ( iterator.hasnext() ){
       iterator.next();
     Map m=(Map)iter.next( );
     }

Aber wirklich weiter bin ich bei meiner Suche nach ner Lösung leider noch nicht!
 
Zurück