일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Java#java#자바#다오#디티오#브이오#dao#dto#vo
- 항해플러스#항해#항해플러스3기#회고
- db#데이터베이스#오라클#sql
- 자바
- 쿼리스트링#쿼리문자열#바인딩
- 국비지원JAVA#국비지원자바#프로그랭#JSP#국비지원JSP#국비교육JSP#웹개발자#코딩
- 개발자도서#개발자책#도메인#DDD#도메인주도개발시작하기#개발스터디#
- 개발자#it도서#도메인#DDD#ddd
- Java#정처기#비트연산자#정보처리기사
- Spring#spring#스프링#스프링프레임워크#스프링자동주입#스프링생성자#스프링기본#국비지원#국비교육#국비지원스프링
- Java#java#메모리영역#클래스로더#가비지컬렉터
- tibero#티베로#이중화#failvover
- spring#Spring#RequestBody#ResponseBody
- 자바#Java#배열예시#연습#기초다지기
- Spring#spring#스프링#스프링프레임워크#스프링의존성주입#스프링생성자#스프링기본#국비지원#국비교육#국비지원스프링
- 국비지원JAVA
- 국비지원자바#국비교육자바#국비지원java#국비교육java#자바스크립트#프론트엔드
- #java#JAVA#프로그래밍#웹개발자
- java
- 국비지원#국비교육
- 국비지원#국비교육#국비지원자바#국비교육자바#css#HTML#JAVA
- html#HTML#프론트엔드#개발자#코딩#국비지원#국비교육#국비지원프론트엔드#국비지원HTML#국비지원html#국비프론트엔드
- Java#JAVA#매개변수
- 프로그래밍
- 국비지원JAVA#국비교육JAVA#국비지원자바#국비교육자바#JSP#SERVLET#서블릿#
- 항해99 #항해플러스 #주니어개발자 #주니어개발자역량강화 #주니어개발자멘토링 #개발자사이드프로젝트 #코딩부트캠프 #코딩부트캠프후기
- Resource #
- Java#컴파일러#자바컴파일러#
- IntelliJ#인텔리제이#인텔리#단축키
- #
- Today
- Total
개린이 개발노트
국비지원 JAVA(자바) 프로그래밍 (람다,Operator,Predicate,andThen,compose,anyMatch) 본문
국비지원 JAVA(자바) 프로그래밍 (람다,Operator,Predicate,andThen,compose,anyMatch)
개린이9999 2022. 12. 5. 10:26람다
Operator 428p
매개변수도 있고, 리턴값도 있고 그런것들을 이용해서 람다함수만듦.
Operator 실행시는 것 .apply()
package A;
import java.util.function.BinaryOperator;
import java.util.function.UnaryOperator;
public class A {
public static void main(String[] args) {
BinaryOperator<Double> bo =(a,b)->a+b; //(제네릭을 설정해야됨)
// 더블 대문자로 bo는 람다 저장하는 이름, ab는 매개변수 이름(이항연산자라 두개가 들어감),-> 어떤 것을 리턴 받을지 (매개변수,리턴 모두 더블로받음)
System.out.println(bo.apply(3.5, 16.3));
// 단항(not 같은 것), 이항(and 나 or 같은 논리연산 사칙연산), 삼항 연산자(조건식 비교하고 참일때 거짓일 떄)
UnaryOperator<Double> uo= (a)->a+10; //(제네릭을 설정해야됨)
System.out.println(uo.apply(3.0));
}
}
제네릭설정한경우↑
DoubleBinaryOperator dbo= (a,b)-> a*b; //애초에 더블이라고 저장해놨으므로 제네릭 필요x
System.out.println(dbo.applyAsDouble(1.4, 2.5)); //.applyAs~~~로 사용
제네릭설정안한경우↑
IntUnaryOperator iuo=(x)-> {
System.out.println("iuo람다 실행");
return x+10;
};
iuo.applyAsInt(10); // 처리 과정안에 프린트문이 있으므로 System.out.println("iuo람다 실행"); 이 실행됨
}
}
제네릭 설정안하면서 단항연산자에 return에 전부 제대로 쓴 경우 ↑(처리 과정안에 프린트문이 있으므로 System.out.println("iuo람다 실행"); 이 실행됨
2개의 정수를 받아서 큰값을 출력!
// 2개의 정수를 받아서 큰값을 출력
IntBinaryOperator ibo= (x,y)-> {
if(x>y) {
return x;
} else {
return y;
}
};
System.out.println(ibo.applyAsInt(10, 5));
}
}
결과값: 10
oprator
매개변수->값; 이상태로 끝나면 값이 리턴값이 됨
매개변수 -> {
구현
return 값;
}
oprator는 무조건 리턴값이 있기때문에 사용가능
//클래스 만들고 객체생성, 객체호출//
2교시!
oprator,람다식 이용해서 최대값 구하기
package A;
import java.util.function.IntBinaryOperator;
public class Sample01 {
// 정적변수
static int[] scores = { 92, 93, 78 };
static int maxOrMin(IntBinaryOperator operator) {
int result = scores[0]; // result의 기능은 결과 저장
// 향상된 for문
for (int score : scores) {
result = operator.applyAsInt(score, result);
}
return result;
}
public static void main(String[] args) {
int max = maxOrMin((a, b) -> {
if (a > b) {
return a;
} else {
return b;
}
});
System.out.println("최대값: " + max);
int min = maxOrMin((a, b) -> {
if (a > b) {
return b;
} else {
return a;
}
});
System.out.println("최소값: " + min);
}
}
3교시
Predicate
매개변수가 있고, 리턴값도 있는데
리턴값이 무조건 boolean 타입으로(true, false)로 정해져있음!
package A;
import java.util.function.Predicate;
public class Sample02 {
public static void main(String[] args) {
// 10이상이면 True, 아니면 False
Predicate<Integer> p = (a) -> {
if (a >= 10) {
return true;
} else {
return false;
}
};
System.out.println(p.test(15)); // 이 결과를 가지고 if문 작업을 더함
if (p.test(15))
System.out.println("10이상임");
else
System.out.println("10미만임");
}
}
package A;
public class Student {
String name;
int eng;
int math;
String major;
//생성자 만들기
public Student(String name, int eng, int math, String major) {
this.name = name;
this.eng = eng;
this.math = math;
this.major = major;
}
// getter 만들기
public String getName() {
return name;
}
public int getEng() {
return eng;
}
public int getMath() {
return math;
}
public String getMajor() {
return major;
}
}
package A;
import java.util.function.Predicate;
public class Sample03 {
// 전역에서 쓸 수 있는 변수 설정
static Student[] list = {
new Student("홍길동", 90, 80, "컴공"),
new Student("이순신", 95, 70, "통계"),
new Student("김유신", 100, 60, "컴공")
};
static double avgEng(Predicate<Student> predicate) {
int count=0;
int sum = 0;
for (Student student : list) {
if (predicate.test(student)) {
count++;
sum+= student.getEng();
}
}
return (double)sum/count;
}
public static void main(String[] args) {
double avg;
avg=avgEng(t->t.getMajor().equals("컴공")); // .equals 같냐 다르냐 물어보는
System.out.println(avg);
}
}
결과값:95.0
4교시
이어서 합계 구하기
package A;
import java.util.function.Predicate;
public class Sample03 {
// 전역에서 쓸 수 있는 변수 설정
static Student[] list = { new Student("홍길동", 90, 80, "컴공"), new Student("이순신", 95, 70, "통계"),
new Student("김유신", 100, 60, "컴공") };
static int sumMath(Predicate<Student> predicate) {
int count = 0;
int sum = 0;
for (Student student : list) {
if (predicate.test(student)) {
sum += student.getMath();
}
}
return sum;
}
public static void main(String[] args) {
int sum;
sum = sumMath((t) -> t.getMajor().equals("컴공"));
System.out.println("합계 : " + sum);
}
}
전공이 컴공인 사람 구하기
package A;
import java.util.function.Predicate;
public class Sample03 {
static Student[] list = {
new Student("홍길동", 90, 80, "컴공"),
new Student("이순신", 95, 70, "통계"),
new Student("김유신", 100, 60, "컴공"),
new Student("홍길동", 90, 80, "컴공"),
new Student("이순신", 95, 70, "통계"),
new Student("김유신", 100, 60, "컴공"), };
static int cnt(Predicate<Student> predicate) {
int cnt = 0;
for (Student student : list) {
if (predicate.test(student)) {
cnt++;
}
}
return cnt;
}
public static void main(String[] args) {
int cnt;
cnt =cnt((t) -> t.getMajor().equals("컴공"));
System.out.println("합계 " + cnt);
}
}
5교시
인터페이스{
추상메서드;
defalut 메서드
}
default 메서드
andThen()
Consumer, Fucntion,Operator
compose()
Function<T, R>, DoubleUnaryOperator
IntUnrayOperator, LongUnrayOperator
(체이닝과 비슷한 개념)
andThen()
인터페이스A, 인터페이스B, 인터페이스AB
인터페이스AB=인터페이스A.andThen(인터페이스B);
최종결과 = 인터페이스 AB.method();
인터페이스AB.method() -> 인터페이스A(람다)
->인터페이스B(람다) -> 최종결과 리턴
compose
인터페이스A, 인터페이스B, 인터페이스AB
인터페이스AB=인터페이스A.compose(인터페이스B);
최종결과 = 인터페이스 AB.method();
인터페이스AB.method()-> 인터페이스B(람다)
-> 인터페이스 A(람다) -> 최종결과 리턴
예시 andThen() ↓
package A;
public class Member {
String name;
String id;
public Member(String name, String id) {
this.name=name;
this.id=id;
}
public String getName() {
return name;
}
public String getId() {
return id;
}
}
package A;
import java.util.function.Consumer;
public class Sample04 {
public static void main(String[] args) {
Consumer<Member> conA = (x) -> {
System.out.println("conA :" + x.getName());
};
Consumer<Member> conB = (x) -> {
System.out.println("conA :" + x.getId());
};
Consumer<Member> conAB = conA.andThen(conB);
// conA.accept(new Member("홍길동", "hong"));
// conB.accept(new Member("홍길동", "hong"));
conAB.accept(new Member("홍길동", "hong"));
}
}
예시2 compose ↓
compose
인터페이스A, 인터페이스B, 인터페이스AB
인터페이스AB=인터페이스A.compose(인터페이스B);
최종결과 = 인터페이스 AB.method();
인터페이스AB.method()-> 인터페이스B(람다)
-> 인터페이스 A(람다) -> 최종결과 리턴
package A;
import java.util.function.Function;
public class Sample05 {
public static void main(String[] args) {
Function<Integer, Integer> conA= (x) -> {
return x*10;
};
Function<Integer, Integer> conB= (x) -> {
return x-5;
};
Function<Integer, Integer> conAB= conA.compose(conB);
int result= conAB.apply(10);
System.out.println("compose : "+result );
}
}
차이비교 ↓
package A;
import java.util.function.Function;
public class Sample05 {
public static void main(String[] args) {
Function<Integer, Integer> conA= (x) -> {
return x*10;
};
Function<Integer, Integer> conB= (x) -> {
return x-5;
};
Function<Integer, Integer> conAB= conA.compose(conB);
int result= conAB.apply(10);
System.out.println("compose : "+result );
conAB= conA.andThen(conB);
result = conAB.apply(10);
System.out.println("andThen: " + result);
}
}
스트림
컬렉션 프레임워크(배열) 각각의 요소를 하나씩 참조해서 람다로 처리
표준화
-원본을 변경하지 않음
-for -> 외부 반복 / 스트림 -> 내부 반복
- 재사용 불가( 코드를 다시 구현해서 만들어야함, 한번 만들면 끝)
-병렬 처리 지원
처리 순서
1. 생성
2. 가공(중개 연산-변환)
3. 결과
for문,while문( 외부반복) ,forEach(내부반복 차이) ↓
package 스트림;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class Sample01 {
public static void main(String[] args) {
List<String> list = Arrays.asList(new String[] { "홍", "김", "이", "유" });
int i = 0;
System.out.println("for문 이용");
for (i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("외부 반복자 이용");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("내부 반복자 이용");
list.stream().forEach(s-> System.out.println(s));
}
}
결과값: for문 이용
홍
김
이
유
외부 반복자 이용
홍
김
이
유
내부 반복자 이용
홍
김
이
유
6교시
클래스↓
package 스트림;
public class Student {
String name;
int score;
public Student(String name, int score) {
super();
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
}
메인↓
package 스트림;
public class Student {
String name;
int score;
public Student(String name, int score) {
super();
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
}
결과값
이름 : 홍길동 점수 : 90
이름 : 고길동 점수 : 80
스트림에서
순차처리 ↓
package 스트림;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Sample03 {
static void print(String str) {
System.out.println(str + " : " + Thread.currentThread().getName());
}
public static void main(String[] args) {
List<String> list = Arrays.asList("김", "이", "박", "최", "양", "남궁");
// 순차 처리
Stream<String> stream = list.stream();
stream.forEach(Sample03::print);
}
}
김 : main
이 : main
박 : main
최 : main
양 : main
남궁 : main
-병렬 처리 지원 ↓
Stream<String> stream2 = list.parallelStream();
stream2.forEach(Sample03::print);
}
}
=========================
최 : main
남궁 : ForkJoinPool.commonPool-worker-2
김 : ForkJoinPool.commonPool-worker-11
양 : ForkJoinPool.commonPool-worker-2
박 : ForkJoinPool.commonPool-worker-11
이 : ForkJoinPool.commonPool-worker-9
package 스트림;
import java.util.Arrays;
import java.util.List;
public class Sample04 {
public static void main(String[] args) {
List<Student> list = Arrays.asList(
new Student("홍길동", 90),
new Student("고길동", 70),
new Student("고기동", 88)
);
double avg = list.stream()
.mapToInt(Student::getScore)
.average()
.getAsDouble();
System.out.println("평균 : "+ avg);
}
}
결과값: 평균 : 82.66666666666667
package 스트림;
import java.util.Arrays;
import java.util.stream.Stream;
public class Sample05 {
public static void main(String[] args) {
String[] arr = { "김", "박", "이", "최" };
Stream<String> s1 = Arrays.stream(arr); //배열을 스트림으로 만드는 작업
//Stream<String> stream = list.stream():
s1.forEach(a->System.out.print(a + " "));
System.out.println();
Stream<String> s2= Arrays.stream(arr, 1, 4);
s2.forEach(a->System.out.print(a + " ")); // 범위만 정해지게 끔
}
}
결과값:
김 박 이 최
박 이 최 (1번방 부터 4번방 전까지!!)
package 스트림;
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Sample05 {
static int sum = 0;
public static void main(String[] args) {
String[] arr = {"김", "박", "이", "최", "남"};
Stream<String> na = Arrays.stream(arr);
na.forEach(a -> System.out.print(a + " "));
System.out.println();
// 배열 index 1번 방 부터 4번 방 전!까지
Stream<String> na2 = Arrays.stream(arr, 1, 4);
na2.forEach(a -> System.out.print(a + " "));
IntStream na3 = IntStream.rangeClosed(1, 100);
na3.forEach(n -> sum += n); // 1부터 100까지 누적 합계
System.out.println("합 : " + sum);
}
}
7교시
가공(중개 연산)
중복제거
package 스트림;
import java.util.Arrays;
import java.util.List;
public class Sample06 {
public static void main(String[] args) {
List<String>list = Arrays.asList("홍길동","김유신","홍길동","김유신","홍길동","유관순");
// 중복제거
list.stream().distinct().forEach(n->System.out.println(n));
}
}
//filter
list.stream().filter(n->n.startsWith("홍")).forEach(n->System.out.println(n));
}
}
홍으로 시작하는것 (중복포함)
결과값
홍길동
홍길동
홍길동
list.stream().filter(n->n.startsWith("홍")).distinct().forEach(n->System.out.println(n));
}
}
홍으로 시작하는것 (중복제거)
결과값
홍길동
필터 이용해서 홀수에 해당하는 것만 추출하기
package 스트림;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
public class Sample06 {
public static void main(String[] args) {
List<String>list = Arrays.asList("홍길동","김유신","홍길동","김유신","홍길동","유관순");
// 중복제거
// list.stream().distinct().forEach(n->System.out.println(n));
//filter
// list.stream().filter(n->n.startsWith("홍")).distinct().forEach(n->System.out.println(n));
IntStream s= IntStream.of(1,2,3,4,5,6,7,8,9,10);
s.filter(n-> n%2==1).forEach(n->System.out.println(n));
}
}
결과값: 1 3 5 7 9
flatmap 메서드
package 스트림;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Sample07 {
public static void main(String[] args) {
List<String> list1 = Arrays.asList("동해 물과", "백두 산이", "마르고 닳도록");
list1.stream().flatMap(data -> Arrays.stream(data.split(" ")))
.forEach(System.out::println);
System.out.println();
list1.stream().flatMap(data->Stream.of(data.split(" ")))
.forEach(System.out::println);
}
}
결과값
동해
물과
백두
산이
마르고
닳도록
동해
물과
백두
산이
마르고
닳도록
(딱딱 잘린 형태로 나옴)
package 스트림;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Sample07 {
public static void main(String[] args) {
List<String> list1 = Arrays.asList("동해 물과", "백두 산이", "마르고 닳도록");
list1.stream().map(data->data.length())
.forEach(System.out::println);
}
}
결과값(정수로 리턴시켜줌)
5
5
7
문자열이었던 것을 실수(정수도 똑같음) 로 변환하는 법
trim 기능
package 스트림;
import java.util.Arrays;
import java.util.List;
import java.util.stream.DoubleStream;
import java.util.stream.Stream;
import sun.java2d.d3d.D3DSurfaceData;
public class Sample07 {
public static void main(String[] args) {
List<String> list2= Arrays.asList("1.1,2.2,3.3,4.4,5.5,6.6");
DoubleStream ds=list2.stream().flatMapToDouble(data->{
String [] arr = data.split(",");
double[] darr = new double [arr.length];
for (int i = 0; i < darr.length; i++) { //trim메서드를 통해서 공백(space바)제거 한뒤
darr[i] = Double.parseDouble(arr[i].trim()); // Double.parseDouble 실수 형태로 형변환 하는 메서드
}
return Arrays.stream(darr);
});
ds.forEach(System.out::println);
}
}
skip 기능
4개를 스킵시켜라-> 0,1,2,3 이 넘어가고 4부터 나타나게 됨 ↓
package 스트림;
import java.util.stream.IntStream;
public class Sample08 {
public static void main(String[] args) {
IntStream s = IntStream.range(0,10);
s.skip(4).forEach(n->System.out.print(n));
}
}
limit 기능
4개까지만 limit시켜라-> 4개까지만 나오고 더 안나옴(한계치 지정할 때 쓰임)
package 스트림;
import java.util.stream.IntStream;
public class Sample08 {
public static void main(String[] args) {
IntStream s = IntStream.range(0,10);
s.limit(4).forEach(n->System.out.print(n));
}
}
skip, limit 순서대로 사용할 때 ↓
package 스트림;
import java.util.stream.IntStream;
public class Sample08 {
public static void main(String[] args) {
IntStream s = IntStream.range(0,10);
s.skip(3).limit(4).forEach(n->System.out.print(n));
}
}
결과값: 3 4 5 6
imit,skip순서대로 사용할 때 ↓
package 스트림;
import java.util.stream.IntStream;
public class Sample08 {
public static void main(String[] args) {
IntStream s = IntStream.range(0,10);
s.limit(4).skip(3).forEach(n->System.out.print(n));
}
}
결과값:3
마지막교시!!
package 스트림;
import java.util.Arrays;
import java.util.List;
public class Sample09 {
public static void main(String[] args) {
List<String> list = Arrays.asList("홍길동","김유신","이순신","유관순");
list.stream().sorted().forEach(System.out::println);
}
}
결과값
김유신
유관순
이순신
홍길동
package 스트림;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class Sample09 {
public static void main(String[] args) {
List<String> list = Arrays.asList("홍길동", "김유신", "이순신", "유관순");
//.sorted() <-- 오름차순 정렬 메서드
list.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println);
}
}
결과값: 역순으로 나옴
long
package 스트림;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class Sample09 {
public static void main(String[] args) {
int[] arr = new int[100];
for (int i = 0; i < 100; i++) {
arr[i] = i + 1;
}
long c = Arrays.stream(arr).count();
System.out.println("count : "+ c);
}
}
결과값: count : 100
int 고정은 아니지만(double도 될수도 있고 등등) sum 관련
int s = Arrays.stream(arr).sum();
System.out.println("sum :"+ s);
}
}
결과값: sum :5050
findFirst 첫번쨰 타입 찾기
OptionalInt fisrt= Arrays.stream(arr).findFirst();
System.out.println("first : " + fisrt.getAsInt());
}
}
결과값: 1
Optional 이란
Optional클래스 NPE(null point exception) 예외 빈칸(공백)에 관련된 예외처리!
Optional클래스 널값(null) 감싸는 wrapper 클래스
최대값 구하기(max를 min으로 바꾸면 최소값)
OptionalInt max= Arrays.stream(arr).max();
System.out.println("최대값: " + max);
}
}
.anyMatch (true or false 밖에 안됨)
.allMatch(true or false 밖에 안됨)
package 스트림;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.OptionalInt;
public class Sample09 {
public static void main(String[] args) {
int[] arr = new int[100];
for (int i = 0; i < 100; i++) {
arr[i] = i + 1;
}
long c = Arrays.stream(arr).count();
System.out.println("count : "+ c);
int s = Arrays.stream(arr).sum();
System.out.println("sum :"+ s);
OptionalInt fisrt= Arrays.stream(arr).findFirst();
System.out.println("first : " + fisrt.getAsInt());
OptionalInt max= Arrays.stream(arr).max();
System.out.println("최대값: " + max);
System.out.println(Arrays.stream(arr).anyMatch(n-> n> 80));
System.out.println(Arrays.stream(arr).allMatch(n-> n>= 1));
}
}
결과값~~~~~
true
true
짝수만 중복 제거해서 내림차순 정렬 출력(Stream 사용해서) 스트림 사용안해서
package 스트림;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
public class Sample10 {
public static void main(String[] args) {
int[] data = { 5, 6, 4, 2, 3, 1, 1, 2, 2, 4, 8 };
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < data.length; i++) {
if (data[i] % 2 == 0) {
list.add(data[i]); // 짝수 추출
}
}
System.out.println(list);
HashSet<Integer> set = new HashSet<>(list); // 중복 제거
System.out.println(set);
ArrayList<Integer> dlist = new ArrayList<>(set);
dlist.sort(Comparator.reverseOrder()); // 역순으로 정렬
System.out.println(dlist);
int[] result = new int[dlist.size()]; //
for (int i = 0; i < result.length; i++) {
result[i] = dlist.get(i);
}
for (int i = 0; i < result.length; i++) {
System.out.print(result[i]);
}
}
}
짝수만 중복 제거해서 내림차순 정렬 출력(Stream 사용해서) 스트림 사용해서
package 스트림;
import java.util.Arrays;
import java.util.Comparator;
public class Sample11 {
public static void main(String[] args) {
int[] data = { 5, 6, 4, 2, 3, 1, 1, 2, 2, 4, 8 };
int[] result = Arrays.stream(data). // IntStream 생성
boxed() // IntStream -> Stream<Integer>
.filter(n -> n % 2 == 0) //짝수
.distinct() // 중복제거
.sorted(Comparator.reverseOrder()) // int로 작업을 못하고 Integer로만 가능
.mapToInt(Integer::intValue) // Integer를 다시 int로 변환
.toArray(); // 배열로 변환
for (int i = 0; i < result.length; i++) { // 배열 출력할 때는 for문사용
System.out.println(result[i]);
}
}
}
'국비지원(국비교육) 웹 개발자 과정' 카테고리의 다른 글
국비지원 JAVA(자바) 프로그래밍 (입출력 스트림) (0) | 2022.12.07 |
---|---|
국비지원 JAVA(자바) 프로그래밍(Thread, 스레드, 람다, 익명함수, 상태 제어- sleep(), join() ,yield(), Thread동기화synchronized,데몬스레드 ) (1) | 2022.12.06 |
국비지원 JAVA(자바) 프로그래밍 (제네릭,제네릭스,람다,람다식) (0) | 2022.12.02 |
국비지원 JAVA(자바) 프로그래밍(전화번호,이메일 정규식,정규표현식,ArrayList,LinkedList) (1) | 2022.12.01 |
국비지원 JAVA(자바) 프로그래밍(인터페이스, 다형성, 내부클래스, 여러가지 예외처리방법, 정규식, 정규표현식, 자바API) (0) | 2022.11.30 |