# Ergebnis nur einmal anzeigen lassen



## patges (1. November 2005)

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


----------



## -ben- (1. November 2005)

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:

```
SELECT DISTINCT * FROM tbl
```
Gruss
ben


----------



## patges (1. November 2005)

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


----------



## -ben- (1. November 2005)

Hmm... Könntest du den Source mal posten?


----------



## Thomas Darimont (1. November 2005)

Hallo!

 Schau mal hier:

```
/**
  * 
  */
 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


----------



## patges (2. November 2005)

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:


```
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


----------



## TommyMo (2. November 2005)

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


----------



## torsch2711 (2. November 2005)

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


----------



## DealeyLama (2. November 2005)

@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:


```
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


----------



## patges (8. November 2005)

So, hab hier mal nen ersten erstellen 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!


----------



## patges (9. November 2005)

Hiiiilfe


----------



## elmato (9. November 2005)

Eine Möglichkeit wäre dies hier:

```
public class bla {

	public static void main(String[] args) {
		System.out.println();
		List liste = new LinkedList();
		liste.add("1 10 20");
		liste.add("2 22 33");
		liste.add("2 22 33");
		liste.add("3 11 05");
		liste.add("5 44 55");
		for (Iterator iter = liste.iterator(); iter.hasNext();) {
			System.out.println("Alte liste: "+ iter.next());
			
		}
		liste = bla.filter(liste);
	for (Iterator iter = liste.iterator(); iter.hasNext();) {
		System.out.println("Neue Liste: "+ iter.next());
		
	}
	}
	
	public static List filter(List liste){
		List list2 = new LinkedList();
		Iterator i = liste.iterator();
		while(i.hasNext()){
			String s = i.next().toString();
			if(!list2.contains(s))list2.add(s);
		}
		return list2;
	}
}
```
vielleicht hilft's 
mfg
elmato


----------

