2017-09-09 31 views
0

我创建了一个简单的类MapExtension以适应将4个值传递给列表视图适配器并使用LinkedHashmap添加MapList的ArrayList。从LinkedHashMap提取地图值作为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());  
} 

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

在此先感谢。

回答

1

mValuesvalueArrayList<MapExtensions>values返回Collection<V>,所以你应该能够做到..

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

如果你想你的扁平化嵌套的数组,你可以看看流flatMap () 方法。 Here is one person's blog on that。顺便说一下,Kotlin集合有一个flatMap()扩展方法,用于集合。

+0

这导致我将API的使用记录为@since 1.8 +。由于Android Studio不允许我使用1.8版本,但只能使用1.7版本,所以我无法使其工作。 –

1

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

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

小提示:你应该程序对接口,所以不是用你的类型ArrayList,想想使用List,让你不依赖于无处不在的一个具体实施。

+0

考虑到SO可能会更好使用'List ',对'flapMap(List :: stream)'还是'collect(Collectors.toList())'更好? – AjahnCharles

+0

是的,在这种情况下它变得更简单。 –

+0

感谢您的提示。我通过使用该代码将'API的使用记录为@since 1.8 +',AS仅允许使用1.7。 –