Set bestehend aus Strings sortieren

wSam

Erfahrenes Mitglied
Hallo zusammen

Ich habe ein Set bestehend aus Keys einer HashMap. Die Keys sind alles Strings. Nun möchte ich das Set so ordnen, dass nach der Länge der Strings geordnet wird: daher der kürzeste zuletzt, der längste zuerst.

Wie kann ich dies am besten machen?

Vielen Dank im Voraus und Gruss
 
Hallo,

eine Möglichkeit wäre Folgendes:
Java:
package de.tutorials.reima.examples;

import java.util.Comparator;
import java.util.HashMap;
import java.util.TreeSet;

public class SortStringSetByLength {
	public static void main(String[] args) {
		HashMap<String, Integer> hm = new HashMap<String, Integer>();
		hm.put("a", 1);
		hm.put("ab", 2);
		hm.put("abcd", 3);
		hm.put("abcdef", 4);
		hm.put("abcdefgh", 5);
		
		TreeSet<String> sortedKeys = new TreeSet<String>(
			new Comparator<String>() {
				public int compare(String str1, String str2) {
					return Integer.valueOf(str2.length()).
						compareTo(str1.length());						
				}
			}
		);		
		sortedKeys.addAll(hm.keySet());
		
		System.out.println(sortedKeys);		
	}
}

Grüße,
Matthias
 
Hallo,

nettes Beispiel Matthias :) So gings auch:
Java:
/**
 * 
 */
package de.tutorials;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;

/**
 * @author thomas.darimont
 *
 */
public class SortedSetExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Map<String, String> map = new TreeMap<String, String>(new Comparator<String>(){
			@Override
			public int compare(String str1, String str2) {
				return str2.length() - str1.length();
			}
		});
				
		map.put("aaaa","1");
		map.put("a","2");
		map.put("aaaaaa","3");
		map.put("aa","4");
		map.put("aaa","5");
			
		System.out.println(map.keySet());
	}

}

Ausgabe:
Code:
[aaaaaa, aaaa, aaa, aa, a]

Gruß Tom
 
Zurück