List<String>
을 List<Object>
으로 변환하고 싶습니다.목록을 변환하는 방법 <String> 목록으로 <Object>
기존 방법 중 하나가 List<String>
을 반환하고이를 List<Object>
으로 변환하고 싶습니다. Java에서 요소를 반복하고 변환하는 다른 방법이 있습니까?
List<String>
을 List<Object>
으로 변환하고 싶습니다.목록을 변환하는 방법 <String> 목록으로 <Object>
기존 방법 중 하나가 List<String>
을 반환하고이를 List<Object>
으로 변환하고 싶습니다. Java에서 요소를 반복하고 변환하는 다른 방법이 있습니까?
새로운 ArrayList<Object>
의 생성자에 매개 변수로 List<String>
을 통과 많은 코드를 작성할 필요가 없습니다. String
가 Object
연장 임의 Collection
List<Object> objectList = new ArrayList<Object>(stringList);
는만큼의 종류가 ArrayList
유형 확장으로 생성자 인수로 전달 될 수있다. 생성자는 Collection
이지만, List
은 의 하위 인터페이스이므로 List<String>
만 사용할 수 있습니다.
이것은 불필요한 객체를 구성하며 큰 목록 인 경우 잠재적으로 많은 메모리를 차지할 수 있습니다. 그냥 던져. –
답변에 대한 의견을 읽어보십시오. 그것을 주조하는 것은 잘못된 해결책입니다. 이 답변은 다운 보트를받을 가치가 없습니다. –
예. 나는 downvote를 제거 할 것이다 (6 분 또는 그것을 말한다) 말한다. 하지만 내 것도 가치가 없습니다. –
이 꽤 비효율적이지만, 적어도 당신은 ~
List<String> stringList = new ArrayList<String>();
List<Object> objectList = Arrays.asList(stringList.toArray());
Tks. 나는 이것이 새로운 ArrayList를 메모리에 만들지 않을 것이라고 생각한다. 원래의 stringList를 List
@Alex 새로운 ArrayList를 만들지는 않지만 내부적으로 수정할 수없는 private List 구현을 만듭니다.이 구현은 ArrayList와 매우 유사합니다. 효과는 매우 비슷하지만 새 요소를 해당 목록에 추가해야하는 경우 문제가 발생합니다. 게다가, 저장하고 있다고 생각하는 메모리는'stringList.toArray()'이후에 새로운 배열을 만드는 데 사용됩니다. 그 다음에 새로운 할당 배열이 생성됩니다. – OscarRyz
모든 Java 컬렉션은 문자열 또는 기타 객체 컬렉션입니다. 형식 인수는 단지 설탕입니다. 매우 큰 목록을 처리하는 것과 같은 상황에 따라 변환하기를 원할 수 있습니다. 동일한 목록에서 서로 다른 두 가지 유형의 개체를 혼합하는 위험이 있습니다.
List<Object> objectList = (List)stringList;
그리고 악성 콘텐츠를 제거 할 수있는 @SuppressWarning을 넣어 ...
-1이 방법을 사용하는 것은 좋지 않습니다. –
정말 그렇지 않습니다. 이미 필요한 것을 얻을 때 새로운 컬렉션을 만드는 이유는 무엇입니까? 합리적이고 효율적입니다. –
그러면 동일한 객체에 대한 두 개의 참조가 생깁니다. 하나의 참조는 그것이'List
List<Object> ofObjects = new ArrayList<Object>(ofStrings);
같이 :
import java.util.*;
class C {
public static void main(String[] args) {
List<String> s = new ArrayList<String>();
s.add("S");
List<Object> o = new ArrayList<Object>(s);
o.add(new Object());
System.out.println( o);
}
}
다른 방법으로 당신은 addAll
방법을 시도 할 수있는 목록이있는 경우 개체 목록이 기존 목록입니다.
개인적으로 현재 가장 높은 평가를받은 답변이 모두 올바르지 만 어느 누구도 우아하고 재사용 가능한 방식으로 문제를 해결하지 못한다고 생각합니다. 특히이 작업을 자주해야하는 경우에는 더욱 그렇습니다.
는 @ReverendGonzo는 in his comment를 제안은 적어도List<? extends Object>
을 받아 들일 수 있도록 당신이 (어떤 방식으로 변경할 수 없습니다 오래된 레거시 코드/종속성이 있다고 가정하자.이 기존 모듈 많은 이야기를 할 필요가 있음을, 또한 가정하자.
항상 캐스팅/복사하는 것이 장기적으로는 견딜 수 없을 것이라고 생각합니다. 코드가 교활한 버그에 취약하거나 따르기가 어렵거나 비효율적이며 읽기가 힘들어집니다.
읽기 쉽고 효율적인 생산 코드를 얻으려면 더티 파트를 별도의 모듈로 캡슐화하는 것이 좋습니다. 무해하지만 추악한 던지기.
class ProductionCode {
public void doJob() {
List<String> strings = Arrays.asList("pear", "apple", "peach");
StringMagicUtils.dealWithStrings(strings);
}
}
class StringMagicUtils {
@SuppressWarnings("unchecked")
public static void dealWithStrings(List<String> strings) {
ExternalStringMagic.dealWithStringsAsObjects((List) strings);
}
}
// Legacy - cannot edit this wonderful code below ˇˇ
class ExternalStringMagic {
public static void dealWithStringsAsObjects(List<Object> stringsAsObjects) {
// deal with them as they please
}
}
'문자열'은 왜 객체입니까? – khachik
'List
정확히 기대하고있는 함수에리스트를 전달해야 할 수도 있습니다. 형식 지움으로 인해 목록은 목록