728x90
스트림
스트림 연산
스트림 생성 - 중간 연산 - 최종 연산
package test17;
import java.util.Arrays;
import java.util.List;
public class ArrayListStreamTest2 {
public static void main(String[] args) {
//문자열 스트림 객체를 생성해서 중복 제거, 필터링으로 출력
//List객체 생성
List<String> list = Arrays.asList("a","b","a","c","a","d");
list.stream().forEach(a -> System.out.print(a + " "));
System.out.println();
//distinct() 메소드로 중복 제거 후 내부 반복자로 출력
list.stream().distinct().forEach(s -> System.out.print(s + " "));;
}
}
package test17;
import java.util.Arrays;
import java.util.List;
public class ArrayListStreamTest2 {
public static void main(String[] args) {
//문자열 스트림 객체를 생성해서 중복 제거, 필터링으로 출력
//List객체 생성
List<String> list = Arrays.asList("a","b","a","c","a","d");
list.stream().forEach(a -> System.out.print(a + " "));
System.out.println();
//distinct() 메소드로 중복 제거 후 내부 반복자로 출력
list.stream().distinct().forEach(s -> System.out.print(s + " "));;
System.out.println();
//"a"인 문자열로 필터링 후 내부 반복자로 출력
list.stream().filter(m -> m.startsWith("a")).forEach(b -> System.out.print(b + " "));;
}
}
package test17;
import java.util.Arrays;
import java.util.List;
public class ArrayListStreamTest2 {
public static void main(String[] args) {
//문자열 스트림 객체를 생성해서 중복 제거, 필터링으로 출력
//List객체 생성
List<String> list = Arrays.asList("a","b","a","c","a","d");
list.stream().forEach(a -> System.out.print(a + " "));
System.out.println();
//distinct() 메소드로 중복 제거 후 내부 반복자로 출력
list.stream().distinct().forEach(s -> System.out.print(s + " "));;
System.out.println();
//"a"인 문자열로 필터링 후 내부 반복자로 출력
list.stream().filter(m -> m.startsWith("a")).forEach(m -> System.out.print(m + " "));;
System.out.println();
//중복 제거와 "a"인 문자열 필터링 후 내부 반복자로 출력
list.stream().distinct().filter(o -> o.startsWith("a")).forEach(b -> System.out.print(b + " "));
}
}
package test17;
import java.util.Arrays;
import java.util.List;
public class ArrayListStreamTest2 {
public static void main(String[] args) {
//문자열 스트림 객체를 생성해 문자열의 길이값으로 구성된 IntStream 객체를 생성한 후 내부 반복자로 반복하면서 해당 요소의 문자열의 길이
//mapping : 스트림의 데이터를 매개변수로 받아 가공해 새로운 스트림을 만들어서 리턴
// 데이터의 변환을 위한 기능으로 스트림의 요소를 다른 요소와 매핑해서 대체할 수 있는 기능
//int 타입을 받아 IntStream객체 리턴
List<String> listint = Arrays.asList("HTML","CSS","Javascript","Java");
listint.stream().mapToInt(t -> t.length()).forEach(u -> System.out.print(u + " "));
}
}
package test17;
import java.util.Arrays;
import java.util.List;
public class ArrayListStreamTest2 {
public static void main(String[] args) {
//문자열 스트림 객체를 생성해 문자열의 길이값으로 구성된 IntStream 객체를 생성한 후 내부 반복자로 반복하면서 해당 요소의 문자열의 길이
//mapping : 스트림의 데이터를 매개변수로 받아 가공해 새로운 스트림을 만들어서 리턴
// 데이터의 변환을 위한 기능으로 스트림의 요소를 다른 요소와 매핑해서 대체할 수 있는 기능
//int 타입을 받아 IntStream객체 리턴
List<String> listint = Arrays.asList("HTML","CSS","Javascript","Java");
listint.stream().mapToInt(t -> t.length()).forEach(u -> System.out.print(u + " "));
//함수형 인터페이스의 메소드 참조 방식
listint.stream().mapToInt(String::length).forEach(System.out::println);
}
}
package test17;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class ArrayListStreamTest2 {
public static void main(String[] args) {
//함수형 인터페이스 방식
List<String> listint = Arrays.asList("HTML","CSS","Javascript","Java");
listint.stream().mapToInt(t -> t.length()).forEach(u -> System.out.print(u + " "));
System.out.println();
//함수형 인터페이스의 메소드 참조 방식
listint.stream().mapToInt(String::length).forEach(System.out::println);
System.out.println();
//정렬
listint.stream().sorted().forEach(System.out::println); //오름차순
System.out.println();
listint.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println); //내림차순
}
}
스트림 -> 람다식으로 처리
Steam은 함수형 인터페이스 표준 API, 미리 만들어져있어 제공됨
함수형 인터페이스 종류는 Consumer, Supplier, Function, Operator, Predicate
스트림 활용
package test17;
public class TravelCustomer {
private String name;
private int price;
private int grade;
public TravelCustomer() {}
public TravelCustomer(String name, int price, int grade) {
this.name = name;
this.grade = grade;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
@Override
public String toString() {
return "이름 : " + name + ", 가격 : " + price + ", 등급 : " + grade;
}
}
package test17;
import java.util.ArrayList;
import java.util.List;
public class TravelCustomerTest {
public static void main(String[] args) {
TravelCustomer tc1 = new TravelCustomer("이성계", 100, 1);
TravelCustomer tc2 = new TravelCustomer("이방원", 300, 3);
TravelCustomer tc3 = new TravelCustomer("이방과", 50, 2);
List<TravelCustomer> customerList = new ArrayList<TravelCustomer>();
customerList.add(tc1);
customerList.add(tc2);
customerList.add(tc3);
System.out.println("고객 명단을 추가된 순서대로 출력");
customerList.stream().map(c -> c.getName()).forEach(System.out::println);
System.out.println();
int total = customerList.stream().mapToInt(p -> p.getPrice()).sum();
System.out.println("총 비용 : "+total);
System.out.println();
System.out.println("등급이 2이상 고객 명단 정렬하여 출력");
customerList.stream().filter(g -> g.getGrade()>=2).map(n -> n.getName()).sorted().forEach(System.out::println);
}
}
Thread
package test18;
public class Thread1 {
public static void main(String[] args) {
//스레드(Thread)
//하나의 프로세스에서 동시에 기능을 처리하기 위한 목적으로 사용되는 실행 단위
//하나의 프로세스에는 1개 이상의 스레드가 존재함
//싱글(메인) 스레드 : 최초 실행 시 메인 스레드가 main() 함수를 실행시킴
//멀티 스레드 : 하나의 기능을 실행할 수 있는 실행 단위(스레드)가 여러 개인 것을 말함
//스레드를 사용하는 목적은 '동시 작업 처리'
//JVM이 운영체제 역할을 함(CPU 역할)
//자바는 프로세스가 존재하지 않고 스레드만 존재
//JVM에 의해 스케쥴되는 실행 단위 코드 블록. 하나의 프로세스(응용 프로그래밍) 내에서 여러 가지 작업을 동시에 수행 할 수 있게 하는 것
//스레드를 만드는 2가지 방법
//1) Thread 클래스를 상속받아 Thread 작성
// Thread 클래스를 상속받아 run() 메소드를 오버라이딩 함으로써 구현 하는 방식
//2) java.lang.Runnable 인터페이스를 구현하여 Thread 작성
// Runnable 인터페이스를 구현함으로써 Thread를 사용하는 방식. main에서 Thread 생성 정보로 구현한 클래스의 객체를 넘겨줌으로써 객체를 생성하는 방식
//메소드
//start() run()메소드 호출
//run() 스레드가 실행할 부분에 기술하는 스레드 코드로 오버라이딩하여 스레드 코드를 작성. 메소드가 종료하면 스레드도 종료됨
//1. 싱글 스래드
for(int i=0;i<300;i++) {
System.out.println("$ "+(i+1));
}
for(int i=0;i<300;i++) {
System.out.println("* "+(i+1));
}
System.out.println();
System.out.println("main 스레드 종료");
}
}
package test18;
//첫번째 스레드 : Thread 클래스를 상속받아서 구현 run() 메소드 오버라이드
class One extends Thread{
@Override
public void run() {
for(int i=0;i<300;i++) {
System.out.println("$ "+(i+1));
}
System.out.println("One 스레드 종료");
}
}
//두번째 스레드 : Runnable 인터페이스 구현 run()메소드 오버라이드
class Two implements Runnable{
@Override
public void run() {
for(int i=0;i<300;i++) {
System.out.println("* "+(i+1));
}
System.out.println("Two 스레드 종료");
}
}
public class Thread2{
public static void main(String[] args) {
//멀티 스레드 : 수행할 여러 개의 작업 단위의 코드를 블록으로 작성하고 수행
// -> run() 메소드 내에 수행할 동작 코드를 작성(오버라이드)
//첫번째 스레드
One t1 = new One(); //Thread 클래스의 멤버를 사용하여 스레드 처리 할 수 있음
t1.start(); //run()메소드 내의 코드를 수행시킴
//두번째 스레드
//인터페이스 변수명 = new 구현클래스();
Runnable t2 = new Two();
Thread thread = new Thread(t2); //Runnable 인터페이스 내의 run()메소드를 수행시킬 Thread 클래스의 멤버들을 사용하기 위해 Thread 클래스의 생성자에 인터페이스 변수명을 대입
thread.start();
System.out.println("main 스레드 종료");
//순서대로 처리 되는 것이 아니라 동시에 처리됨
}
}
728x90
'KDT > Java' 카테고리의 다른 글
240321 Java - 스레드 3 (0) | 2024.03.21 |
---|---|
240320 Java - 스레드 2 (0) | 2024.03.20 |
240314 Java - 람다식 2, 스트림 1 (0) | 2024.03.14 |
240313 Java - 람다식 (0) | 2024.03.13 |
240311 Java - 내부 클래스2 (0) | 2024.03.11 |