У меня есть этот метод для преобразования List
в Map
, используя одно из свойств элементов списка:
Для краткости это выглядит так это:
private Map<String, List<Diagnostic<? extends JavaFileObject>>> toMap( List<Diagnostic<? extends JavaFileObject>> diagnostics ) {
Map<String, List<Diagnostic<? extends JavaFileObject>>> result = new HashMap<String, List<Diagnostic<? extends JavaFileObject>>>();
for ( Diagnostic<? extends JavaFileObject> d : diagnostics ) {
List<Diagnostic<? extends JavaFileObject>> list = null;
if ( !result.containsKey( d.getCode() ) ) {
list = new ArrayList<Diagnostic<? extends JavaFileObject>>();
result.put( d.getCode(), list );
} else {
list = result.get( d.getCode() );
}
assert list != null;
list.add( d );
}
return result;
}
Yiack! ..
Мне очень нравятся genercis, я использую java до них, и я не хочу возвращаться к эпохе cast all , но когда общий шаблон содержит как элемент сам по себе общий элемент, все идет беспорядочно.
Я знаю, что в Java1.7 мы сможем использовать оператор « diamond », но должен быть другой способ.
Вот как это будет выглядеть в необщей версии:
private Map toMap( List diagnostics ) {
Map result = new HashMap();
for( Object o : diagnostics ) {
Diagnostic d = ( Diagnostic ) o;
List list = null;
if( !result.containsKey( d.getCode() ) ) {
list = new ArrayList();
result.put( d.getCode() , list );
} else {
list = result.get( d.getCode() );
}
assert list != null;
list.add( d );
}
return result;
}
Приблизительно, я не пытался ее скомпилировать.
Как другие языки справляются с этим? Например, C # ?, Scala? Мне очень понравилось, как работают SML или Haskell,но что-то я думаю, что слишком много магии может повредить (но это, конечно, субъективно)
Есть ли обходной путь для этого?