그래서 당신은 자바의 하천에 대해 배우기 위해 여기에 왔습니다. 하지만 사람들이 낚시를 하거나 물이 흐르는 종류의 하천에 대해서는 배우지 않습니다. 우리는 데이터 작업을 훨씬 더 쉽게 만들어주는 Java 8에 도입된 강력한 기능인 데이터 스트림에 대해 이야기하고 있습니다. 이 기능을 처음 접했거나 시도해 보았지만 제대로 풀 수 없었더라도 걱정하지 마세요. 쉽고 이해하기 쉬운 언어로 전체 여정을 안내해 드리겠습니다.
준비가 된? Java Streams에 대해 자세히 알아보세요!
A 스트림은 데이터를 순서대로 처리하는 방법입니다. 항목 목록이 있고 해당 항목을 사용하여 작업(필터, 정렬, 매핑 등)을 수행하고 싶다고 가정해 보세요. Stream을 사용하면 모든 작업을 깔끔하고 효율적인 방식으로 수행할 수 있습니다. 이는 데이터가 처리될 때까지 여러 단계를 거쳐 흐르는 조립 라인과 같습니다.
스트림에 관해 기억해야 할 주요 사항:
for 루프를 사용하거나 컬렉션을 직접 조작하는 것은 어떨까요? 음, 세 가지 주된 이유가 있습니다:
스트림 작업의 두 가지 주요 유형인 중급 및 터미널
을 살펴보겠습니다.데이터를 준비하지만 최종 결과가 바로 나오지는 않는 작업입니다. 이것을 "워크숍" 단계라고 생각하세요.
필터()
이것은 체와 같습니다. 조건에 따라 요소를 선택합니다. 예를 들어 정수 목록에서 짝수만 원하는 경우 filter()를 사용합니다.
java Copy code Listnumbers = Arrays.asList(1, 2, 3, 4, 5); List evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList()); // Output: [2, 4]
필터링하는 이유 filter()가 없으면 목록을 수동으로 반복하고 일치하는 요소만 새 목록에 추가해야 합니다. filter()를 사용하면 한 번의 깔끔한 단계로 이 작업을 수행할 수 있습니다.
지도()
이것은 변압기입니다. 요소를 취하고 다른 것을 반환합니다. 예를 들어, 문자열 목록이 있고 각 문자열의 길이를 원하는 경우:
java Copy code Listwords = Arrays.asList("apple", "banana", "cherry"); List lengths = words.stream() .map(String::length) .collect(Collectors.toList()); // Output: [5, 6, 6]
왜 map을 해야 하나요? map()은 문자열 목록을 길이 목록으로 변환하는 것과 같이 각 요소를 다른 것으로 변환해야 할 때 사용됩니다.
별개의()
중복 필터와 같습니다. 이렇게 하면 스트림에서 중복 요소가 제거됩니다.
java Copy code Listnumbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5); List distinctNumbers = numbers.stream() .distinct() .collect(Collectors.toList()); // Output: [1, 2, 3, 4, 5]
왜 구별해야 하나요? 일반 목록에서는 중복 항목을 수동으로 확인해야 합니다. independent()는 이 작업을 한 줄로 수행합니다.
정렬()
이렇게 하면 데이터가 자연 순서(또는 원할 경우 맞춤 순서)로 정렬됩니다.
java Copy code Listnames = Arrays.asList("Charlie", "Alice", "Bob"); List sortedNames = names.stream() .sorted() .collect(Collectors.toList()); // Output: ["Alice", "Bob", "Charlie"]
정렬하는 이유는 무엇입니까? 정렬 논리를 직접 작성하는 대신 sorted()가 이를 처리합니다.
최종 결과를 생성하고 전체 스트림의 처리를 트리거합니다. 이것을 "출구점"이라고 생각하세요.
모으다()
가장 일반적인 터미널 작업입니다. 스트림 결과를 수집하여 목록, 세트 또는 기타 컬렉션에 넣습니다.
java Copy code Listnames = Arrays.asList("Charlie", "Alice", "Bob"); List upperNames = names.stream() .map(String::toUpperCase) .collect(Collectors.toList()); // Output: ["CHARLIE", "ALICE", "BOB"]
왜 수집하나요? 스트리밍 결과를 컬렉션으로 수집하려면 거의 항상 Collect()를 사용합니다. 마지막 목적지입니다.
forEach()
결과가 필요하지 않고 각 항목에 대해 작업(예: 인쇄)을 수행하고 싶다면 forEach()가 도움이 됩니다.
java Copy code numbers.stream() .forEach(System.out::println);
왜 forEach인가요? 이것은 콘솔에 데이터를 인쇄하거나 파일에 쓰는 것과 같은 부작용에 적합합니다.
줄이다()
reduce()는 많은 데이터를 가져와서 하나의 결과로 요약합니다. 예를 들어 숫자 목록을 합산하면 다음과 같습니다.
java Copy code int sum = numbers.stream() .reduce(0, Integer::sum); // Output: 15
왜 줄여야 할까요? 값을 하나의 결과로 결합하거나 축적해야 하는 경우, Reduce()를 사용하는 것이 좋습니다.
모든 스트림이 컬렉션에서 생성되는 것은 아닙니다. Java는 다양한 종류의 데이터를 처리하기 위해 다른 유형의 스트림을 제공합니다.
IntStream, LongStream, DoubleStream
이 스트림은 기본 유형을 처리하는 데 특화되어 있습니다. Stream
예:
java Copy code IntStream intStream = IntStream.of(1, 2, 3, 4); int sum = intStream.sum(); // Output: 10
파일 스트림
Files.lines()를 사용하여 파일에서 스트림을 생성할 수 있습니다.
java Copy code try (Streamlines = Files.lines(Paths.get("data.txt"))) { lines.forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); }
파일 스트림을 사용하는 이유는 무엇입니까? 대용량 파일을 처리할 때 모든 데이터를 메모리에 로드하는 것은 효율적이지 않을 수 있습니다. 스트림을 사용하면 한 줄씩 처리할 수 있습니다.
좋은 질문입니다! 비교해 보겠습니다:
Java의 스트림은 데이터 처리 방식을 단순화하는 것입니다. 컬렉션 작업 시 코드를 더 읽기 쉽고, 유지 관리하기 쉽고, 더 효율적으로 만듭니다. 데이터 필터링, 변환, 축소 등 무엇을 하든 Streams는 부피가 큰 루프와 수동 작업이 필요 없는 명확하고 간단한 방법을 제공합니다.
이제 Streams의 기본 사항을 잘 익혔으니 여기서 멈춰야 할까요? 당신을 즉시 전문가로 만들어줄 더 많은 Java 팁을 보려면 Twitter, LinkedIn에서 나를 팔로우하거나 내 블로그를 확인하세요! 이 가이드가 도움이 되었다면 동료 개발자와 공유하세요. 공유는 배려입니다!
시도해 볼 준비가 되셨나요? 다음 프로젝트에 해당 스트림이 흐르도록 하세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3