我创建了一个简单的类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中提取ArrayList<MapExtension>
并返回Collections
时,我会从不同的试验中获得这些错误(在评论中):
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());
}
如何成功检索并放置在兼容类型中?
提前致谢。
答案 0 :(得分:1)
value
的每个mValues
都是ArrayList<MapExtensions>
,而values
会返回Collection<V>
,所以您应该可以这样做..
Collection<ArrayList<MapExtensions>> localVar = mValues.values();
如果要展平嵌套数组,可以查看流flatMap()方法。 Here is one person's blog on that。 BTW,Kotlin集合有一个flatMap()扩展方法,适用于集合。
答案 1 :(得分:1)
如果我理解你,给定LinkedHashMap<Integer, ArrayList<MapExtension>> mValues
,您希望ArrayList<MapExtension>
展平输入地图的值。使用Java 8,您可以轻松地执行此操作:
ArrayList<MapExtension> extensions = mValues
.values()
.stream()
.collect(ArrayList::new, ArrayList::addAll, ArrayList::addAll);
小提示:您应该针对接口进行编程,而不是在类型中使用ArrayList
,请考虑使用List
,这样您就无法在任何地方使用某个特定的具体实现。