Home
Java
자바에서 리스트 슬라이스 (Java List Slice - subList, stream, for loop)
devfoxstar
devfoxstar
September 05, 2022
1 min

Table Of Contents

01
for loop
02
subList
03
Stream API
04
결론

자바 리스트에서 필요한 위치의 데이터만 슬라이스 하는 방법을 알아보겠습니다.
효율적인 데이터 가공과 빠른 성능은 코드 품질을 높이기 위해 꼭 필요합니다.


for loop

for-loop는 전통적인 코드이면서 성능이 검증된 방식입니다.
그래서 대용량의 데이터를 변환 할 때 우선 고려됩니다.

package com.devfoxstar.codingtest;

import java.util.ArrayList;
import java.util.List;

public class Slice {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        list.add("E");

        List<String> subList = new ArrayList<>();
        for (int i = 2; i < 4; i++) {
             subList.add(list.get(i));
        }

        System.out.println(subList);    //[C, D]
    }
}

subList

subList는 간단하게 사용할 수 있지만, 메모리 문제가 있습니다.
변환 과정에서 부모 객체의 값을 메모리에 기억하기 때문입니다.

따라서 대용량의 데이터를 처리하는 함수로는 적합하지 않습니다.

package com.devfoxstar.codingtest;

import java.util.ArrayList;
import java.util.List;

public class Slice {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        list.add("E");

        List<String> subList = new ArrayList<>(list.subList(2,4));
        System.out.println(subList);    //[C, D]
    }
}

Stream API

자바8 부터 추가된 Stream APILambda를 활용해서 간편하게 데이터 가공이 가능합니다.
단 한줄의 코드로 간단하게 구현이 가능합니다.

물론 Stream API는 아직 전통적인 for-loop 방식에 비하면 성능이 떨어집니다.
그래서 대용량의 데이터를 처리하거나 복잡한 변환이 필요한 경우에는 성능 체크가 필수입니다.

package com.devfoxstar.codingtest;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Slice {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        list.add("E");

        List<String> subList = list.stream().skip(2).limit(2).collect(Collectors.toList());
        System.out.println(subList);    //[C, D]
    }
}

결론

리스트 데이터를 가공하는 방식은 다양합니다.
최근에는 Stream API + Lambda 조합이 필수처럼 사용되고 있습니다.

하지만 상황에 따라서 성능 저하가 발생할 수 있습니다.
그래서 대용량의 데이터를 처리한다면, 선택한 방식의 성능 체크는 필수입니다.

그리고 여전히 for-loop 연산은 좋은 성능으로 자주 활용되고 있습니다.


Tags

#Java#List#Slice#subList#stream#for-loop

Related Posts

Java - Record class (불변 데이터 객체 만들기)
June 11, 2024
1 min
© 2024, All Rights Reserved.

Quick Links

About Me

Media