JAVA

[JAVA] List와 Java 8 이상 기능 통합

인생아 2024. 11. 22. 00:12
반응형

Java 8부터 도입된 Lambda 표현식, Stream API, OptionalList와 같은 컬렉션 데이터를 처리하는 데 강력한 기능을 제공합니다.

1. Lambda와 List의 결합

Lambda 표현식은 간결한 코드로 리스트의 데이터를 처리하거나 반복 작업을 수행하는 데 유용합니다. forEach(), removeIf()와 같은 메서드와 함께 사용하면 코드의 가독성이 크게 향상됩니다.

Lambda를 활용한 List 데이터 출력

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

public class LambdaWithList {
    public static void main(String[] args) {
        List<String> cities = new ArrayList<>();
        cities.add("서울");
        cities.add("부산");
        cities.add("대구");

        // Lambda로 데이터 출력
        cities.forEach(city -> System.out.println("도시 이름: " + city));
    }
}

조건에 따른 요소 제거

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

public class RemoveIfExample {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("홍길동");
        names.add("이순신");
        names.add("안중근");
        names.add("이순신");

        // '이순신' 이름 제거
        names.removeIf(name -> name.equals("이순신"));
        System.out.println("이름 제거 후: " + names);
    }
}

Lambda와 List의 결합을 활용하면 데이터 필터링, 조건부 작업이 간단해집니다.

반응형

2. Stream과 List의 상호 변환

Stream API는 데이터를 필터링, 매핑, 정렬 등 다양한 연산으로 처리할 수 있는 강력한 도구입니다. Stream과 List 간의 변환을 통해 데이터를 효율적으로 다룰 수 있습니다.

List를 Stream으로 변환

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

public class ListToStream {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();
        fruits.add("사과");
        fruits.add("배");
        fruits.add("바나나");

        // Stream으로 변환 후 필터링
        List<String> filteredFruits = fruits.stream()
                                            .filter(fruit -> fruit.contains("바"))
                                            .collect(Collectors.toList());
        System.out.println("필터링된 과일: " + filteredFruits);
    }
}

Stream을 List로 변환

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

public class StreamToList {
    public static void main(String[] args) {
        Stream<String> cityStream = Stream.of("서울", "부산", "대구");

        // Stream을 List로 변환
        List<String> cityList = cityStream.collect(Collectors.toList());
        System.out.println("리스트로 변환된 도시들: " + cityList);
    }
}

Stream을 활용하면 대용량 데이터를 메모리 효율적으로 처리할 수 있습니다. 특히 데이터 스트림을 필터링하거나 매핑하는 작업에 적합합니다.

3. Optional과의 연계

Optional은 NullPointerException을 방지하며 안전하게 값을 처리할 수 있는 Java 8의 기능입니다. List와 Optional을 결합하여 특정 데이터의 유무를 검사하거나 안전하게 결과를 반환할 수 있습니다.

Optional과 List의 연계

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

public class OptionalWithList {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("홍길동");
        names.add("이순신");
        names.add("안중근");

        // Optional로 안전하게 첫 번째 요소 가져오기
        Optional<String> firstName = names.stream().findFirst();
        firstName.ifPresent(name -> System.out.println("첫 번째 이름: " + name));
    }
}

Optional로 Null 검사

import java.util.Optional;

public class NullSafeExample {
    public static void main(String[] args) {
        Optional<String> name = Optional.ofNullable(null);

        // 값이 없으면 대체 값 반환
        String result = name.orElse("기본 이름");
        System.out.println("이름: " + result);
    }
}

Optional과 Stream API를 결합하면 데이터의 유무를 간결하게 처리할 수 있습니다.

참고사이트

반응형