繁体   English   中英

从LinkedHashMap中将地图值提取为ArrayList

[英]Extracting map values as ArrayList from LinkedHashMap

我创建了一个简单的MapExtension类,以适应将4个值传递给MapExtension适配器,并使用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返回Collections提取ArrayList<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()方法。 这是一个人的博客 顺便说一句,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这样您就不会在任何地方都受一个特定的具体实现约束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM