Quelqu'un connait-il un moyen de convertir une liste en map en sélectionnant une propriété en clé ?

J'ai cherché dans Apache Commons, Spring Utils et Google Guava mais j'ai pas trouvé d'équivalent.

J'ai donc développé ma fonction :

Exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
List<Client> clients = Client.findAll();
Map<Long, Client> clientById = asMap(clients, "id");
Id étant une propriété de l'objet Client.
Est ce que quelqu'un connait un équivalent ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
public static <K, V> Map<K, V> asMap(final List<? extends V> items, final String keyProperty) {
	Map<K, V> result = null;
 
	if (items != null && !items.isEmpty()) {
		result = new HashMap<K, V>();
 
		try {
			final Class<?> clazz = items.get(0).getClass();
			final Field fieldKey = clazz.getDeclaredField(keyProperty);
			fieldKey.setAccessible(true);
 
			for (final V item : items) {
				final K key = (K) fieldKey.get(item);
				result.put(key, item);
			}
 
			if (result.size() != items.size()) {
				LOG.error("asMap : Key Deja existante !");
				result = null;
			}
		} catch (final NoSuchFieldException e) {
			throw new IllegalArgumentException("La clé " + keyProperty + " est inexistante");
		} catch (final Exception e) {
			LOG.error("Exception asMap()", e);
			result = null;
		}
 
	}
	return result;
}
PS : le get(0) ne me plait guère.
870ms pour 1 000 000 d'items.