스트림 사용 소개:
계산 구조:
부작용:
예제 1: 부작용이 있는 코드
Map<String, Long> freq = new HashMap<>(); try (Stream<String> words = new Scanner(file).tokens()) { words.forEach(word -> { freq.merge(word.toLowerCase(), 1L, Long::sum); }); }
문제: 이 코드는 forEach를 사용하여 외부 상태(freq)를 수정합니다. 반복적이며 스트림을 활용하지 않습니다.
예제 2: 부작용이 없는 코드
Map<String, Long> freq; try (Stream<String> words = new Scanner(file).tokens()) { freq = words.collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting())); }
해결책: Collectors.groupingBy 수집기를 사용하여 외부 상태를 변경하지 않고 빈도 테이블을 생성합니다. 더 짧고, 더 명확하고, 더 효율적입니다.
스트림 API 사용:
수집가:
예시 3: 가장 빈번한 10개의 단어 목록 추출
List<String> topTen = freq.entrySet().stream() .sorted(Map.Entry.<String, Long>comparingByValue().reversed()) .limit(10) .map(Map.Entry::getKey) .collect(Collectors.toList());
설명:
Collectors API의 복잡성:
지도 및 수집 전략:
예 4: 병합 기능이 있는 toMap 사용
Map<String, Long> freq; try (Stream<String> words = new Scanner(file).tokens()) { freq = words.collect(Collectors.toMap( String::toLowerCase, word -> 1L, Long::sum )); }
설명:
예시 5: 아티스트별로 앨범을 그룹화하고 베스트셀러 앨범 찾기
Map<Artist, Album> topAlbums = albums.stream() .collect(Collectors.toMap( Album::getArtist, Function.identity(), BinaryOperator.maxBy(Comparator.comparing(Album::sales)) ));
설명:
문자열 컬렉션:
Collectors.joining을 사용하여 문자열을 선택적 구분 기호로 연결합니다.
예 6: 구분 기호로 문자열 연결
String result = Stream.of("came", "saw", "conquered") .collect(Collectors.joining(", ", "[", "]"));
설명:
결론:
위 내용은 항목 스트림에서 부작용이 없는 기능을 우선시합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!