2017-09-09 1 views
0

4 개의 값을리스트 뷰 어댑터로 전달하기 위해 간단한 클래스 인 MapExtension을 만들고 LinkedHashmap을 사용하여 MapExtension의 ArrayList를 추가했습니다. 내가 Collections 반환의 LinkedHashMap에서 ArrayList<MapExtension>을 추출하려고 할 때마다지도 값을 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; 
} 

}

, 나는 (의견) 다른 임상 시험에서 이러한 오류를 얻을 :

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

mValues의 모든 valueArrayList<MapExtensions>, 당신은 스트림에서 볼 수, valuesCollection<V> 반환, 그래서 당신은 당신의 중첩 배열을 평평 할 경우

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

.. 할 수 있어야 flatMap() 메소드를 호출합니다. Here is one person's blog on that. BTW, Kotlin 컬렉션에는 컬렉션에서 작동하는 flatMap() 확장 메서드가 있습니다.

+0

이렇게하면'@since 1.8+'로 문서화 된 API 사용법으로 안내합니다. Android Studio에서 버전 1.8을 사용할 수 없지만 1.7까지만 사용할 수 있으므로 아직 작동하지 않습니다. –

1

나는 당신을 이해하기를, LinkedHashMap<Integer, ArrayList<MapExtension>> mValues 주어진 경우, ArrayList<MapExtension> 입력 된지도의 값을 평평하게하고 싶습니다. 자바 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

팁 주셔서 감사. 그 코드를 사용하여'@since 1.8 +'로 문서화 된 'API 사용법'을 가지고 있으며 AS만이 1.7을 사용할 수 있습니다. –