IT이야기

Java에서 목록으로 배열 변환

cyworld 2022. 7. 24. 22:14
반응형

Java에서 목록으로 배열 변환

Java에서 어레이를 목록으로 변환하려면 어떻게 해야 합니까?

나는제가 사용한을 사용했다 것은Arrays.asList()그러나 동작(및 시그니처)은 Java SE 1.4.2(현재 아카이브 중인 문서)에서8로 변경되어 웹에서 발견된 대부분의 스니펫에서 1.4.2 동작을 사용하고 있습니다.

예를 들어 다음과 같습니다.

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • 1.4.2에서는 1, 2, 3 요소를 포함하는 목록을 반환합니다.
  • 1.5.0+에서는 어레이 스팸이 포함된 목록을 반환합니다.

대부분의 경우 쉽게 검출할 수 있어야 하지만 간과될 수 있습니다.

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);

왜냐하면 당신은 원시적인 형식의 목록을 가질 수 없다는 당신의 예에서, 그렇습니다.이 예에서는 원시 유형의 목록을 가질 수 없기 때문입니다.즉, 바꿔 말하면List<int>가능하지 않다.할 수 없습니다.

당신은 하지만, 하지만,당신은가질 수 있습니다 가질 수 있다.List<Integer>를 랩하는 클래스를 사용하여int원시적인유틸리티 메서드를 사용하여 어레이를 로 변환합니다.

Integer[] spam = new Integer[] { 1, 2, 3 };
List<Integer> list = Arrays.asList(spam);

코드는 IdeOne.com에서 라이브로 실행됩니다.

Java 8에서는 스트림을 사용할 수 있습니다.

int[] spam = new int[] { 1, 2, 3 };
Arrays.stream(spam)
      .boxed()
      .collect(Collectors.toList());

우리는 가질수 없다 우리는을 가질 수 없다.List<int>~하듯이로int오르는 것은 기본 형식여서 타입이기때문에 우리는 단지 원초적인을 가질 수 있다.List<Integer>.

자바 16

자바 16천 API에 새로운 방법 자바 16은천 API에메서드를 도입합니다 새로운라고 소개합니다.toList(). 이 메서드는unmodifiable 목록은 스트림 요소가 들어 있는을 반환합니다.이 편리한 메서드는 스트림 요소를 포함하는 수정할 수 없는 목록을 반환합니다.이 ' 요소'로 .UnsupportedOperationException.

int[] ints = new int[] {1,2,3,4,5};
Arrays.stream(ints).boxed().toList();

Java 8(내부 어레이)

int[] ints = new int[] {1,2,3,4,5};
List<Integer> list11 =Arrays.stream(ints).boxed().collect(Collectors.toList()); 

Java 8 이하(Integer 어레이)

Integer[] integers = new Integer[] {1,2,3,4,5};
List<Integer> list21 =  Arrays.asList(integers); // returns a fixed-size list backed by the specified array.
List<Integer> list22 = new ArrayList<>(Arrays.asList(integers)); // good
List<Integer> list23 = Arrays.stream(integers).collect(Collectors.toList()); //Java 8 only

리스트가 아닌 Array List가 필요합니까?

「 」의 하는 경우.List ★★ArrayList 하면 '어울리지 않다'를 쓸 수 요.toCollection같이요.

ArrayList<Integer> list24 = Arrays.stream(integers)
                          .collect(Collectors.toCollection(ArrayList::new));

★★★★list21조적으 변경 ??? ???

★★★★★★를 사용하는 경우Arrays.asList되는 리스트는 반환되는 되어 있습니다.반환된 리스트의 사이즈가 고정되어 있지 않기 때문입니다.java.util.ArrayList, 「」내에 되어 있는 java.util.Arrays목록에서 하면 " " " "가 반환된 목록에서 를 삭제UnsupportedOperationException던져질 것이다. 될 것 같아요.list22이치할 수 .list23.

말하면list21 될 수 .list21.set(index,element)그러나 이 목록은 구조적으로 수정할 수 없습니다. 즉, 목록에서 요소를 추가하거나 제거할 수 없습니다.자세한 설명은 이 답변에서도 확인하실 수 있습니다.


불변의 리스트를 필요로 하는 경우는, 다음과 같이 정리할 수 있습니다.

List<Integer> list22 = Collections.unmodifiableList(Arrays.asList(integers));

하나 이입니다.Collections.unmodifiableList지정된 목록의 변경할 수 없는 보기를 반환합니다.수정할 수 없는 뷰 컬렉션은 수정할 수 없는 컬렉션이며 백업 컬렉션에 대한 보기이기도 합니다.백업 컬렉션에 대한 변경은 계속 가능하며 변경이 발생할 경우 수정할 수 없는 보기를 통해 볼 수 있습니다.

Java 9와 10에는 정말 불변의 목록이 있습니다.

진정한 불변의 리스트

Java 9:

String[] objects = {"Apple", "Ball", "Cat"};
List<String> objectList = List.of(objects);

Java 10(Terly Unmutable 목록):

하면 됩니다.List.ofJava 9 서 java java java java java java java java java java java java 。타타: :

  1. List.copyOf(Arrays.asList(integers))
  2. Arrays.stream(integers).collect(Collectors.toUnmodifiableList());

대해서 , '왜한가'에 다르죠.List★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 여기 .

Integer[] values = { 1, 3, 7 };
List<Integer> list = Arrays.asList(values);

하지만 이런 걸 하면

list.add(1);

에 넣다java.lang.UnsupportedOperationException경우에 따라서는, 다음의 것이 필요하게 되는 경우도 있습니다.

Integer[] values = { 1, 3, 7 };
List<Integer> list = new ArrayList<Integer>(Arrays.asList(values));

번째 하는 것이 것입니다.List그러나 배열은 고정된 수의 요소처럼 모든 특성을 가진 후드 아래에 있습니다. 경우 유형을 하시기 바랍니다.ArrayList.

도 varargs가 도입되었다는 것입니다.Arrays.asList()되었습니다.vararg 버전에서는, 다음과 같이 있습니다.Arrays.asList(spam)Java5 int vararg 。

이 문제에 대한 자세한 내용은 유효 Java 2nd Ed., 7장, 항목 42에서 설명합니다.

최근에 어레이를 목록으로 변환해야 했습니다.이후 프로그램에서는 데이터 삭제를 시도하면서 목록을 필터링했습니다.Arrays.asList(array) 기능을 사용하면 고정 크기 컬렉션을 만듭니다.추가도 삭제도 할 수 없습니다.이 엔트리는 문제를 보다 잘 설명합니다.Unsupported Operation이 표시되는 이유목록에서 요소를 제거하려고 할 때 예외가 발생합니까?

결국, 저는 "수동" 변환을 해야 했습니다.

    List<ListItem> items = new ArrayList<ListItem>();
    for (ListItem item: itemsArray) {
        items.add(item);
    }

List.addAll(항목) 작업을 사용하여 어레이에서 목록으로 변환을 추가할 수 있습니다.

더 짧은 시간:

List<Integer> list = Arrays.asList(1, 2, 3, 4);

어레이 사용

을 레음음음음음음음음음음으로 입니다.List ", ", "는 ", "는 ", "는 ", "는 ", "는 ", "는 ", "는 ", "는 ", "는 ", ", "는 ", "는 "", "는 "", "는 "", "", "", "", ""는, "", "", "", "", "", "", "", "", ""UnsupportedOperationException던져질 것이다.

Integer[] existingArray = {1, 2, 3};
List<Integer> list1 = Arrays.asList(existingArray);
List<Integer> list2 = Arrays.asList(1, 2, 3);

// WARNING:
list2.add(1);     // Unsupported operation!
list2.remove(1);  // Unsupported operation!

Array List 또는 기타 목록 구현 사용

'어울리다'를 사용할 수 요.for를 ""에 합니다.List 「 」, 「 」등),ArrayList:

List<Integer> list = new ArrayList<>();
for (int i : new int[]{1, 2, 3}) {
  list.add(i);
}

Java 8에서의 스트림 API 사용

배열을 스트림으로 변환한 다음 다른 수집기를 사용하여 스트림을 수집할 수 있습니다. 8 8 을 사용합니다.ArrayList화면 뒤에 있지만 원하는 구현을 강제할 수도 있습니다.

List<Integer> list1, list2, list3;
list1 = Stream.of(1, 2, 3).collect(Collectors.toList());
list2 = Stream.of(1, 2, 3).collect(Collectors.toCollection(ArrayList::new));
list3 = Stream.of(1, 2, 3).collect(Collectors.toCollection(LinkedList::new));

다음 항목도 참조하십시오.

Java 9에서는 새로운 편리한 공장 방식으로 불변의 목록을 사용하는 보다 우아한 솔루션이 제공됩니다.

List<String> immutableList = List.of("one","two","three");

(여기서 복사)

apache commons-lang을 사용하는 경우의 다른 회피책은 다음과 같습니다.

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(ArrayUtils.toObject(spam));

여기서 ArrayUtils.toObject는 변환됩니다.int[]로로 합니다.Integer[]

원라이너:

List<Integer> list = Arrays.asList(new Integer[] {1, 2, 3, 4});

Java 8(또는 그 이후)을 대상으로 하고 있는 경우는, 다음의 조작을 실시할 수 있습니다.

int[] numbers = new int[] {1, 2, 3, 4};
List<Integer> integers = Arrays.stream(numbers)
                        .boxed().collect(Collectors.<Integer>toList());

주의:

해 주세요.Collectors.<Integer>toList()는 " mismatch: from" "Type mismatch: cannot convert from" 이라는하는 데 이 됩니다.List<Object>로로 합니다.List<Integer>

배열에 캐스팅해야 합니다.

Arrays.asList((Object[]) array)
  1. Guava 사용:

    Integer[] array = { 1, 2, 3};
    List<Integer> list = Lists.newArrayList(sourceArray);
    
  2. Apache Commons 컬렉션 사용:

    Integer[] array = { 1, 2, 3};
    List<Integer> list = new ArrayList<>(6);
    CollectionUtils.addAll(list, array);
    

동일한 문제가 발생하여 어레이를 가져와서 동일한 내용의 ArrayList를 반환하는 일반적인 함수를 작성했습니다.

public static <T> ArrayList<T> ArrayToArrayList(T[] array) {
    ArrayList<T> list = new ArrayList<T>();
    for(T elmt : array) list.add(elmt);
    return list;
}

지정된 어레이:

    int[] givenArray = {2,2,3,3,4,5};

정수 배열을 정수 목록으로 변환하는 중

편도: boxed() -> IntStream을 반환한다.

    List<Integer> givenIntArray1 = Arrays.stream(givenArray)
                                  .boxed()
                                  .collect(Collectors.toList());

두 번째 방법: 스트림의 각 요소를 Integer에 매핑한 후 수집합니다.

주의: mapToObj를 사용하여 i에서 (char)i까지 대문자화하여 각 int 요소를 문자열 스트림, char 스트림 등으로 변환할 수 있습니다.

    List<Integer> givenIntArray2 = Arrays.stream(givenArray)
                                         .mapToObj(i->i)
                                         .collect(Collectors.toList());

어레이 유형을 다른 유형으로 변환하는 예:

List<Character> givenIntArray2 = Arrays.stream(givenArray)
                                             .mapToObj(i->(char)i)
                                             .collect(Collectors.toList());

따라서 어떤 Java 버전을 사용하느냐에 따라 달라집니다.

자바 7

 Arrays.asList(1, 2, 3);

또는

       final String arr[] = new String[] { "G", "E", "E", "K" };
       final List<String> initialList = new ArrayList<String>() {{
           add("C");
           add("O");
           add("D");
           add("I");
           add("N");
       }};

       // Elements of the array are appended at the end
       Collections.addAll(initialList, arr);

또는

Integer[] arr = new Integer[] { 1, 2, 3 };
Arrays.asList(arr);

Java 8의 경우

int[] num = new int[] {1, 2, 3};
List<Integer> list = Arrays.stream(num)
                        .boxed().collect(Collectors.<Integer>toList())

레퍼런스 - http://www.codingeek.com/java/how-to-convert-array-to-list-in-java/

이 답변은 제가 사용하는 것이지만 100% 명확하지는 않습니다만, 개선해 주실 수 있습니까?정상적으로 동작하지만 IntelliJ는 새로운 WeatherStation[0]을 추가했습니다.왜 0일까요?

    public WeatherStation[] removeElementAtIndex(WeatherStation[] array, int index)
    {
        List<WeatherStation> list = new ArrayList<WeatherStation>(Arrays.asList(array));
        list.remove(index);
        return list.toArray(new WeatherStation[0]);
    }

Java 8에서는 다음 작업을 수행할 수 있습니다.

int[] temp = {1, 2, 3, 4, 5};
List<Integer> tempList = Arrays.stream(temp).boxed().collect(Collectors.toList());

하여 어레이를 합니다.arr목록으로 이동합니다. Arrays.stream(arr).collect(Collectors.toList());

배열을 목록으로 변환하는 일반적인 방법을 정의하는 예:

public <T> List<T> fromArrayToList(T[] a) {   
    return Arrays.stream(a).collect(Collectors.toList());
}

두 줄의 코드를 사용하여 배열을 목록으로 변환하는 경우 기본 데이터 유형에 자동 상자 유형을 사용해야 합니다.

  Integer [] arr={1,2};
  List<Integer> listInt=Arrays.asList(arr);

언급URL : https://stackoverflow.com/questions/2607289/converting-array-to-list-in-java

반응형