从LinkedHashMap中提取映射值作为ArrayList

我创建了一个简单的类MapExtension来容纳将4个值传递给一个listview适配器,并使用LinkedHashmap来添加MapExtension的ArrayList。

 public class MapExtension { private String studname; private String studnumber; private String schedule; public MapExtension(String studname, String studnumber, String schedule) { this.studname = studname; this.studnumber= studnumber; this.schedule= schedule; } public String getStudname () { return studname; } public String getStudnumber() { return studnumber; } public String getSchedule() { return schedule; } 

}

每当我尝试从LinkedHashMap中提取返回CollectionsArrayList<MapExtension> ,我会从不同的试验中得到这些错误(在注释中):

 ListViewAdapter(Context context, LinkedHashMap<Integer, ArrayList<MapExtension>> mValues) { super(context, R.layout.listview_layout, mValues.keySet().toArray()); this.context = context; //java.lang.ClassCastException: java.util.HashMap$Values //cannot be cast to java.util.ArrayList ArrayList mValues = (ArrayList) mValues.values(); // says incompatible as it will become ArrayList<ArrayList<MapExtension>> ArrayList<MapExtension> mValues = new ArrayList<>(mValues.values()); } 

我怎样才能成功地检索它,并将其放在兼容的类型?

提前致谢。

mValues每个value都是一个ArrayList<MapExtensions> ,并且values返回一个Collection<V> ,所以你应该可以做..

 Collection<ArrayList<MapExtensions>> localVar = mValues.values(); 

如果你想扁平你的嵌套数组,你可以看看流flatMap()方法。 这是一个人的博客 。 BTW,Kotlin集合有一个flatMap()扩展方法,用于集合。

如果我正确地理解了你,给定LinkedHashMap<Integer, ArrayList<MapExtension>> mValues ,你想ArrayList<MapExtension>平输入映射的值。 用Java 8,你可以很容易地做到这一点:

ArrayList<MapExtension> extensions = mValues .values() .stream() .collect(ArrayList::new, ArrayList::addAll, ArrayList::addAll);

一个小提示:您应该针对接口进行编程,而不是在类型中使用ArrayList ,而是考虑使用List以便您不受任何地方特定的具体实现的束缚。