java
스트림은 Java 8에 도입된 새로운 추상 계층입니다. 스트림을 사용하면 SQL 문과 유사한 선언적 방식으로 데이터를 처리할 수 있습니다. 예를 들어, 다음 SQL 문을 고려하십시오.
SELECT max(salary), employee_id, employee_name FROM Employee
위의 SQL 표현식은 개발자 측에서 계산하지 않고 최대 급여 직원의 세부 정보를 자동으로 반환합니다. 개발자는 Java의 컬렉션 프레임워크를 사용하여 루프를 사용하고 반복적으로 확인해야 합니다. 또 다른 문제는 효율성입니다. 멀티 코어 프로세서를 쉽게 사용할 수 있으므로 Java 개발자는 오류가 발생하기 쉬운 병렬 코드 처리를 작성해야 합니다.
이러한 문제를 해결하기 위해 Java 8은 개발자가 특정 코드를 작성할 필요 없이 데이터를 선언적으로 처리하고 멀티코어 아키텍처를 활용할 수 있도록 하는 스트림 개념을 도입했습니다.
Stream은 집계 작업을 지원하는 소스의 개체 시퀀스를 나타냅니다. 다음은 스트림의 특성입니다 -
요소 순서 - 스트림은 특정 유형의 요소 집합을 순차적으로 제공합니다. 스트림은 요청 시 요소를 가져오거나 계산합니다. 요소를 저장하지 않습니다.
출처 − 스트림은 컬렉션, 배열 또는 I/O 리소스를 입력 소스로 사용합니다.
집계 작업 − 스트림은 필터, 매핑, 제한, 축소, 찾기, 일치 등과 같은 집계 작업을 지원합니다.
파이프라인 - 대부분의 스트림 작업은 결과가 파이프라인될 수 있도록 스트림 자체를 반환합니다. 이러한 작업을 중간 작업이라고 하며 해당 기능은 입력을 받아 처리하고 대상에 출력을 반환하는 것입니다. collect() 메서드는 일반적으로 스트림의 끝을 표시하기 위해 파이프라이닝 작업의 끝에 존재하는 터미널 작업입니다.
자동 반복 − 스트림 작업은 명시적인 반복이 필요한 컬렉션과 달리 제공된 소스 요소에 대해 내부적으로 반복을 수행합니다.
Java 8에서는 Collection 인터페이스에 스트림을 생성하는 두 가지 방법이 있습니다.
스트림() − 컬렉션을 소스로 간주하여 순차 스트림을 반환합니다.
병렬스트림() − 컬렉션을 소스로 간주하는 병렬 스트림을 반환합니다.
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
스트림은 스트림의 각 요소를 반복하기 위해 새로운 메소드 'forEach'를 제공했습니다. 다음 코드 부분은 forEach를 사용하여 10개의 난수를 인쇄하는 방법을 보여줍니다.
Random random = new Random(); random.ints().limit(10).forEach(System.out::println);
'map' 메서드는 각 요소를 해당 결과에 매핑하는 데 사용됩니다. 다음 코드 세그먼트는 지도를 사용하여 고유한 숫자 제곱을 인쇄합니다.
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); //get list of unique squares List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
'필터' 방법은 기준에 따라 요소를 제거하는 데 사용됩니다. 다음 코드 세그먼트는 필터를 사용하여 빈 문자열 수를 인쇄합니다.
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); //get count of empty string int count = strings.stream().filter(string -> string.isEmpty()).count();
'limit' 방법은 스트림의 크기를 줄이는 데 사용됩니다. 다음 코드 부분은 limit를 사용하여 10개의 난수를 인쇄하는 방법을 보여줍니다.
Random random = new Random(); random.ints().limit(10).forEach(System.out::println);
'sorted' 메소드는 스트림을 정렬하는 데 사용됩니다. 다음 코드 부분은 10개의 난수를 정렬된 순서로 인쇄하는 방법을 보여줍니다.
Random random = new Random(); random.ints().limit(10).sorted().forEach(System.out::println);
parallelStream은 병렬 처리를 위한 스트림의 대안입니다. parallelStream을 사용하여 빈 문자열의 개수를 출력하는 다음 코드 세그먼트를 살펴보십시오.
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); //get count of empty string long count = strings.parallelStream().filter(string -> string.isEmpty()).count();
순차 스트림과 병렬 스트림 사이를 전환하는 것은 매우 쉽습니다.
수집기는 스트림 요소에 대한 처리 결과를 결합하는 데 사용됩니다. 수집기를 사용하여 목록이나 문자열을 반환할 수 있습니다.
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList()); System.out.println("Filtered List: " + filtered); String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", ")); System.out.println("Merged String: " + mergedString);
Java 8에서는 스트림 처리가 완료될 때 모든 통계를 계산하기 위해 통계 수집기가 도입되었습니다.
List numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics(); System.out.println("Highest number in List : " + stats.getMax()); System.out.println("Lowest number in List : " + stats.getMin()); System.out.println("Sum of all numbers : " + stats.getSum()); System.out.println("Average of all numbers : " + stats.getAverage());
C:\> JAVA.
에서 원하는 편집기를 사용하여 다음 Java 프로그램을 작성하십시오.import java.util.ArrayList; import java.util.Arrays; import java.util.IntSummaryStatistics; import java.util.List; import java.util.Random; import java.util.stream.Collectors; import java.util.Map; public class Java8Tester { public static void main(String args[]) { System.out.println("Using Java 7: "); // Count empty strings List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); System.out.println("List: " +strings); long count = getCountEmptyStringUsingJava7(strings); System.out.println("Empty Strings: " + count); count = getCountLength3UsingJava7(strings); System.out.println("Strings of length 3: " + count); //Eliminate empty string List<String> filtered = deleteEmptyStringsUsingJava7(strings); System.out.println("Filtered List: " + filtered); //Eliminate empty string and join using comma. String mergedString = getMergedStringUsingJava7(strings,", "); System.out.println("Merged String: " + mergedString); List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); //get list of square of distinct numbers List<Integer> squaresList = getSquares(numbers); System.out.println("Squares List: " + squaresList); List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19); System.out.println("List: " +integers); System.out.println("Highest number in List : " + getMax(integers)); System.out.println("Lowest number in List : " + getMin(integers)); System.out.println("Sum of all numbers : " + getSum(integers)); System.out.println("Average of all numbers : " + getAverage(integers)); System.out.println("Random Numbers: "); //print ten random numbers Random random = new Random(); for(int i = 0; i < 10; i++) { System.out.println(random.nextInt()); } System.out.println("Using Java 8: "); System.out.println("List: " +strings); count = strings.stream().filter(string->string.isEmpty()).count(); System.out.println("Empty Strings: " + count); count = strings.stream().filter(string -> string.length() == 3).count(); System.out.println("Strings of length 3: " + count); filtered = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.toList()); System.out.println("Filtered List: " + filtered); mergedString = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.joining(", ")); System.out.println("Merged String: " + mergedString); squaresList = numbers.stream().map( i ->i*i).distinct().collect(Collectors.toList()); System.out.println("Squares List: " + squaresList); System.out.println("List: " +integers); IntSummaryStatistics stats = integers.stream().mapToInt((x) ->x).summaryStatistics(); System.out.println("Highest number in List : " + stats.getMax()); System.out.println("Lowest number in List : " + stats.getMin()); System.out.println("Sum of all numbers : " + stats.getSum()); System.out.println("Average of all numbers : " + stats.getAverage()); System.out.println("Random Numbers: "); random.ints().limit(10).sorted().forEach(System.out::println); //parallel processing count = strings.parallelStream().filter(string -> string.isEmpty()).count(); System.out.println("Empty Strings: " + count); } private static int getCountEmptyStringUsingJava7(List<String> strings) { int count = 0; for(String string: strings) { if(string.isEmpty()) { count++; } } return count; } private static int getCountLength3UsingJava7(List<String> strings) { int count = 0; for(String string: strings) { if(string.length() == 3) { count++; } } return count; } private static List<String> deleteEmptyStringsUsingJava7(List<String> strings) { List<String> filteredList = new ArrayList<String>(); for(String string: strings) { if(!string.isEmpty()) { filteredList.add(string); } } return filteredList; } private static String getMergedStringUsingJava7(List<String> strings, String separator) { StringBuilder stringBuilder = new StringBuilder(); for(String string: strings) { if(!string.isEmpty()) { stringBuilder.append(string); stringBuilder.append(separator); } } String mergedString = stringBuilder.toString(); return mergedString.substring(0, mergedString.length()-2); } private static List<Integer> getSquares(List<Integer> numbers) { List<Integer> squaresList = new ArrayList<Integer>(); for(Integer number: numbers) { Integer square = new Integer(number.intValue() * number.intValue()); if(!squaresList.contains(square)) { squaresList.add(square); } } return squaresList; } private static int getMax(List<Integer> numbers) { int max = numbers.get(0); for(int i = 1;i < numbers.size();i++) { Integer number = numbers.get(i); if(number.intValue() > max) { max = number.intValue(); } } return max; } private static int getMin(List<Integer> numbers) { int min = numbers.get(0); for(int i= 1;i < numbers.size();i++) { Integer number = numbers.get(i); if(number.intValue() < min) { min = number.intValue(); } } return min; } private static int getSum(List numbers) { int sum = (int)(numbers.get(0)); for(int i = 1;i < numbers.size();i++) { sum += (int)numbers.get(i); } return sum; } private static int getAverage(List<Integer> numbers) { return getSum(numbers) / numbers.size(); } }
javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -
C:\JAVA>javac Java8Tester.java
이제 다음과 같이 Java8Tester를 실행하십시오 -
C:\JAVA>java Java8Tester
다음 결과를 생성해야 합니다 -
Using Java 7: List: [abc, , bc, efg, abcd, , jkl] Empty Strings: 2 Strings of length 3: 3 Filtered List: [abc, bc, efg, abcd, jkl] Merged String: abc, bc, efg, abcd, jkl Squares List: [9, 4, 49, 25] List: [1, 2, 13, 4, 15, 6, 17, 8, 19] Highest number in List : 19 Lowest number in List : 1 Sum of all numbers : 85 Average of all numbers : 9 Random Numbers: -1279735475 903418352 -1133928044 -1571118911 628530462 18407523 -881538250 -718932165 270259229 421676854 Using Java 8: List: [abc, , bc, efg, abcd, , jkl] Empty Strings: 2 Strings of length 3: 3 Filtered List: [abc, bc, efg, abcd, jkl] Merged String: abc, bc, efg, abcd, jkl Squares List: [9, 4, 49, 25] List: [1, 2, 13, 4, 15, 6, 17, 8, 19] Highest number in List : 19 Lowest number in List : 1 Sum of all numbers : 85 Average of all numbers : 9.444444444444445 Random Numbers: -1009474951 -551240647 -2484714 181614550 933444268 1227850416 1579250773 1627454872 1683033687 1798939493 Empty Strings: 2
java
자바 대기열 인터페이스 이 자습서에서는 Java Queue 인터페이스와 해당 메서드에 대해 알아봅니다. Queue Java 컬렉션 프레임워크의 인터페이스는 큐 데이터 구조의 기능을 제공합니다. Collection 확장 인터페이스. 대기열을 구현하는 클래스 Queue 이후 인터페이스이므로 직접 구현할 수 없습니다. Queue의 기능을 사용하려면 , 이를 구현하는 클래스를 사용해야 합니다. 배열 데크 링크드리스트 우선순위 대기열 Queue를 확장하는 인터페이스 Queue 인터페이스는 다양한 하위 인터페이스로 확장됩니
자바 I/O 스트림 이 튜토리얼에서는 Java 입력/출력 스트림과 그 유형에 대해 알아봅니다. 자바에서 스트림은 소스에서 읽고 대상에 쓰는 데이터 시퀀스입니다. 입력 스트림 소스에서 데이터를 읽는 데 사용됩니다. 그리고 출력 스트림 대상에 데이터를 쓰는 데 사용됩니다. class HelloWorld { public static void main(String[] args) { System.out.println(Hello, World!); } } 예를 들어 첫 번째 Hello World에서 예를