我有这种方法可以使用列表元素的属性之一将 a 转换List
为 a :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;
}
哎呀!..
我非常喜欢泛型,我在它们之前使用 java,我不想回到铸造一切时代,但是当泛型包含作为元素的泛型元素时,事情变得一团糟。
我知道在 Java1.7 中我们将能够使用“菱形”运算符,但应该有另一种方式。
这是在非通用版本中的样子:
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 处理的方式,但我认为太多的魔法可能会伤害(但这当然是主观的)
有解决方法吗?