# HashMap auf leere Key-Value-Paare prüfen



## kossy (30. Jul 2012)

Hallo zusammen !

Kann mir vielelicht jemand von euch sagen, wie ich es genau in Java realisieren kann, eine Map (in meinem Fall eine HashMap) auf leere Schlüssel-Wertepaare zu prüfen? Oder wie ich vielleicht überprüfen könnte, ob ein bestimmter Wert inerhlab der Maß (in diesme Fall vom Typ String) zu lang ist?

Grüße
Kossy


----------



## Gast2 (30. Jul 2012)

Was sind denn "leere Schlüssel-Wertepaare"?



> Oder wie ich vielleicht überprüfen könnte, ob ein bestimmter Wert inerhlab der Maß (in diesme Fall vom Typ String) zu lang ist?


Mit Maß meinst du Map? Wie soll ein Wert "zu lang" sein?

Erklär das ganze doch bitte mal ein wenig genauer, gerne auch mit nem Beispiel.


----------



## kossy (30. Jul 2012)

Hallo nochmal !

Bitte vergesst das mal mit dem zu langen String, dass ist doch nciht von Relevanz für mich. Es geht mir lediglich um eine Map, die auf einen leeren Inhalte geprüft werden soll. Die Map ist aber in jedem Fall vorhanden, also mit New Operator bereits erzeugt worden.

Grüße
Kossy


----------



## Gast2 (30. Jul 2012)

Ich kann mir unter "leere Inhalte" noch nichts vorstellen.
Willst du prüfen ob die Map komplett leer ist? Willst du prüfen ob zu einem gegebenen Key kein Eintrag in der Map existiert?


----------



## tfa (30. Jul 2012)

Meinst du vielleicht containsKey() oder containsValue()?


----------



## kossy (30. Jul 2012)

Hallo nochmal !

Also ich möchte im Prinzip prüfen, ob

1. Kein Key und kein Value existiert
2. Ein Key und kein Value
3. Kein Key und ein Value

Beide Werte sind vom Typ String in meiner Map (konkret: eine HashMap)

Grüße
Kossy


----------



## Gast2 (30. Jul 2012)

1. Map#isEmpty() ... Falls ich deinen Satz da richtig deute
2. Es gibt keinen Key ohne Value
3. Es gibt keinen Value ohne Key


----------



## Vancold (30. Jul 2012)

Hey!

Wie kommen den leere Keys zustande? 
Meinst du etwa ""?

Wenn ja dann kannst du fragen obs solche Keys gibt. Ansonsten gibts keinen leeren Keys. Du musst einen String in der Hashmap angeben sonst geht da gar nix. Also als Key. Und ob ein Value leer ist ist auch so eine interessante Frage. Was ist leer in deiner Auffassung.

Grob gesagt kannst du alle Keys in der Map rausholen und fragen ob sie vorhanden sind. geht auch mit Values.
Da kannst du schon differenzieren.

Du kannst dir ja die Einträge zurück geben lassen. Die Keys oder die Values.


lg

Rene


----------



## nillehammer (31. Jul 2012)

EikeB hat gesagt.:
			
		

> 1. Map#isEmpty() ... Falls ich deinen Satz da richtig deute
> 2. Es gibt keinen Key ohne Value
> 3. Es gibt keinen Value ohne Key


Das sollte man im Hinterkopf behalten und vielleicht ist Deine Frage damit schon beantwortet.

Was aber durchaus passieren kann ist, dass der "Wert" _null_ als Key oder Value in der Map steht. Das findet man so raus:

```
public final class TestApp {

	/**
	 * @param args
	 */
	public static void main(String[] args ) {

		Map<String, String> stringMap = new HashMap<String, String>();

		// normaler entry.
		stringMap.put("1", "eins");

		// "Wert" null als key
		stringMap.put(null, "meinKeyIstNull");

		// "Wert" null als value
		stringMap.put("meinValueIstNull", null);

		// Nochmal "Wert" null als value
		stringMap.put("meinerAuch", null);

		// Rausfinden, ob null als key
		stringMap.containsKey(null);

		// Entry mit key null löschen
		// (leicht, es kann wenn überhaupt nur einen mit key null geben)
		stringMap.remove(null);

		// Rausfinden, ob null als value
		stringMap.containsValue(null);

		// Entries mit value null löschen
		// (schwieriger, es kann mehrere mit value null geben)
		// Wir iterieren über die entries
		final Iterator<Entry<String, String>> stringEntryIter = stringMap.entrySet().iterator();

		while(stringEntryIter.hasNext()) {

			final Entry<String, String> currentEntry = stringEntryIter.next();
			
			// Wenn wir einen entry mit value null gefunden
			// haben, removen wir ihn
			if(currentEntry.getValue() == null) {
				
				stringEntryIter.remove();
			}
			
		}
	}
}
```


----------



## kossy (31. Jul 2012)

Hallo nochmal !

Danke für die bisherigen Antworten! Da habe ich mich wohl etwas missverständlich ausgedrückt, ich meinte damit folgendes:

*1. Kein Key und kein Value existiert*

Bedeutet, dass der Key = "" ist und der Value auch = ""


*2. Ein Key und kein Value*

Bedeutet, dass der Key != "" ist und der Value aber noch = "" ist


*3. Kein Key und ein Value*

Bedeutet, dass der Key = "" ist und der Value != ""


Meine Map ist immer mit Leerstrings erzeugt, ich will eben nur abprüfen, ob Leerstrings ncoht votrhanden sind, oder durch den User ersetzt wurden und hier ist eben die Frage, wie ich das per Code abprüfen kann.

Grüße
Kossy


----------



## ThreadPool (31. Jul 2012)

kossy hat gesagt.:


> [...]
> *1. Kein Key und kein Value existiert*
> 
> Bedeutet, dass der Key = "" ist und der Value auch = ""
> ...



Punkt 1 und 3 deiner Liste kannst du nicht auseinanderhalten. Ein Leerstring ist ein gültiger Key, eine (normale) Map stellt eine 1:1 Beziehung zwischen Key und Value her. D.h. füllst du eine Map wie folgt 

map.put("","");
map.put("", "B");
map.put("", "A"); 

wird die Map nur ein Paar enthalten und zwar "":"A". Ist es das was du möchtest?


----------



## timbeau (31. Jul 2012)

Wichtig: Leerstring = String mit Länge 0 ist NICHT null. Sondern ein String!

1. Kein Key bedeutet das deine Map leer ist.
2. Schau auf EikeBs Eintrag. Kein Key ohne Value! Siehe oben. "" ist ein Value
3. "" ist ein Value, dementsprechend kann es nur einen Key mit Leerstring geben. 

Es ist ziemlich sinnlos Werte mit "" anzulegen. Was ist denn dein Ziel? Sowas wie ne Properties-Datei?

Ansonsten versteh nillehammers post nur statt auf null kannst du auf "" prüfen.


----------



## bygones (31. Jul 2012)

kossy hat gesagt.:


> Meine Map ist immer mit Leerstrings erzeugt, ich will eben nur abprüfen, ob Leerstrings ncoht votrhanden sind, oder durch den User ersetzt wurden und hier ist eben die Frage, wie ich das per Code abprüfen kann.


es kann in einer Map nur eindeutige Keys geben, d.h. deine Map kann nicht mit Leerstrings (als Key) erzeugt werden, sondern es kann max 1 eintrag mit "" geben.

was auch immer irgendwie als was in deiner Map sein soll. du kannst die Methoden Map (Java 2 Platform SE v1.4.2)) und Map (Java 2 Platform SE v1.4.2)) zum ueberpruefen nutzen.

was nillehammer ja schon gesagt hat - ganz egal was du nun wie suchen willst und keiner versteht was du eigentlich machst....


----------



## Marcinek (31. Jul 2012)

Zeig doch mal Code.


----------



## nillehammer (31. Jul 2012)

kossy hat gesagt.:
			
		

> 1. Kein Key und kein Value existiert
> 
> Bedeutet, dass der Key = "" ist und der Value auch = ""
> 
> ...


Der von mir in meinem letzten Post gepostete Code stellt das ganze für null als Key und/oder Value dar. Ersetze das durch "" und Du kannst es eins zu eins übertragen.


----------

