Java 从LinkedHashMap中提取作为ArrayList的映射值
我创建了一个简单的类Java 从LinkedHashMap中提取作为ArrayList的映射值,java,android,listview,arraylist,collections,Java,Android,Listview,Arraylist,Collections,我创建了一个简单的类MapExtension,用于将4个值传递给listview适配器,并使用LinkedHashmap添加MapExtension的ArrayList public class MapExtension { private String studname; private String studnumber; private String schedule; public MapExtension(String studname, String studnumber, St
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
,返回Collections
,我都会从不同的试验中得到这些错误(在注释中):
ListViewAdapter(上下文、LinkedHashMap mValues){
super(context,R.layout.listview_layout,mValues.keySet().toArray());
this.context=上下文;
//java.lang.ClassCastException:java.util.HashMap$值
//无法强制转换为java.util.ArrayList
ArrayList mValues=(ArrayList)mValues.values();
//表示不兼容,因为它将成为ArrayList
ArrayList mValues=新的ArrayList(mValues.values());
}
如何成功检索它并将其放入兼容类型
提前感谢。每个
mValues
的值都是数组列表
,并且值
返回一个集合
,因此您应该能够这样做
Collection<ArrayList<MapExtensions>> localVar = mValues.values();
收藏。顺便说一句,Kotlin集合有一个flatMap()扩展方法,可用于集合。如果我正确理解您,给定LinkedHashMap mValues
,您希望ArrayList
展平输入映射的值。使用Java 8,您可以轻松地执行以下操作:
ArrayList extensions=mValues
.values()
.stream()
.collect(ArrayList::new,ArrayList::addAll,ArrayList::addAll)代码>
一个小提示:您应该针对接口编程,因此不要在您的类型中使用ArrayList
,而是考虑使用List
,这样您就不必处处依赖于某个特定的具体实现 如果SO使用List
可能会更好,那么flapMap(List::stream)
是否比collector(Collectors.toList())
更好?是的,在这种情况下会更简单。感谢您的提示。通过使用该代码,我将API的用法记录为@since 1.8+
,并且as只允许我使用1.7。这导致我将API的用法记录为@since 1.8+
。我还不能让它工作,因为Android Studio不允许我使用1.8版,但只能在1.7版之前使用。
Collection<ArrayList<MapExtensions>> localVar = mValues.values();