List <>에서 ArrayList <> 로의 변환 문제


91

나는 실제로 문장 목록을 가져 와서 각 문장을 단어로 나누는 다음과 같은 방법이 있습니다. 여기 있습니다:

public List<String> getWords(List<String> strSentences){
allWords = new ArrayList<String>();
    Iterator<String> itrTemp = strSentences.iterator();
    while(itrTemp.hasNext()){
        String strTemp = itrTemp.next();
        allWords = Arrays.asList(strTemp.toLowerCase().split("\\s+"));          
    }
    return allWords;
}

이 목록을 다음 형식으로 해시 맵에 전달해야합니다.

HashMap<String, ArrayList<String>>

그래서이 메서드는 List를 반환하고 arrayList가 필요합니까? 캐스팅하려고하면 운동이 안되는데 ... 제안이 있나요?

또한 ArrayList를 HashMap의 List로 변경하면

java.lang.UnsupportedOperationException

내 코드의이 줄 때문에

sentenceList.add(((Element)sentenceNodeList.item(sentenceIndex)).getTextContent());

더 좋은 제안이 있습니까?

답변:


53

우선,지도가 a HashMap<String, ArrayList<String>>가 아닌 이유는 HashMap<String, List<String>>무엇입니까? 값이 특정 인터페이스 구현이어야하는 이유가 있습니까 List( ArrayList이 경우)?

Arrays.asList는를 반환하지 않으므로 java.util.ArrayList의 반환 값 Arrays.asList을 유형의 변수에 할당 할 수 없습니다 ArrayList.

대신에:

allWords = Arrays.asList(strTemp.toLowerCase().split("\\s+"));

이 시도:

allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));

3
특히 메서드가 배열에 의해 지원되는 고정 된 크기의 목록을 반환 UnsupportedOperationException하기 때문에 발생 Arrays.asList합니다. 수정할 수 없습니다. @Jesper가 여기에 제시 한 솔루션은이를 피할 것입니다.
Duncan Jones

191

Cast는 목록의 실제 인스턴스가 ArrayList. a Vector(의 또 다른 확장 List) 인 경우 ClassCastException이 발생합니다.

HashMap의 정의를 변경할 때 발생하는 오류는 나중에 처리되는 요소로 인해 발생하며 해당 프로세스는 ArrayList. 예외는 찾고있는 방법을 찾지 못했음을 알려줍니다.

ArrayList이전 내용으로 새로 만듭니다 .

new ArrayList<String>(myList);

43

ArrayList # addAll (Collection) 살펴보기

지정된 컬렉션의 반복자가 반환하는 순서대로 지정된 컬렉션의 모든 요소를이 목록의 끝에 추가합니다. 작업이 진행중인 동안 지정된 컬렉션이 수정되면이 작업의 동작은 정의되지 않습니다. (이것은 지정된 컬렉션이이 목록이고이 목록이 비어 있지 않은 경우이 호출의 동작이 정의되지 않음을 의미합니다.)

그래서 기본적으로

ArrayList<String> listOfStrings = new ArrayList<>(list.size());
listOfStrings.addAll(list);

14

Kotlin에서 List는 생성자 매개 변수로 전달하여 ArrayList로 변환 할 수 있습니다.

ArrayList(list)

5

Arrays.asList의 인스턴스를 반환하지 않지만의 인스턴스를 java.util.ArrayList반환합니다 java.util.Arrays.ArrayList.

ArrayList특정 정보 에 액세스하려면 ArrayList로 변환해야합니다.

allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));

0

시도되고 검증 된 접근 방식.

public static ArrayList<String> listToArrayList(List<Object> myList) {
        ArrayList<String> arl = new ArrayList<String>();
        for (Object object : myList) {
            arl.add((String) object);
        }
        return arl;

    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.