728x90
반응형
[Day] 08.07
[Chapter] ~ 11강
☑️ Stream 예제
📌 문제 1
String 배열에서 홀수만 뽑아서 int 배열로 만들기
public class JavaStream {
public static void main(String[] args) {
exam1();
}
public static void exam1() {
String[] strNums = {"1번", "2번", "3번", "4번", "5번"};
// 문제
// strNums에서 홀수만 뽑아서 int 배열로 만들기
int[] arr = Arrays.stream(strNums)
.map( str -> str.substring(0,1))
.mapToInt( str -> Integer.parseInt(str))
.filter( num -> num % 2 == 1 )
.toArray();
for(int num : arr){
System.out.println(num);
}
}
}
✅ map(), mapToInt(), filter(), toArray() 사용
✅ subString 문자열 잘라내기
✅ split 기준을 토대로 자르고 나누기
📌 문제 2
int[] → String[]
public class JavaStream {
public static void main(String[] args) {
exam1();
exam2();
}
public static void exam2() {
int[] arr = {1, 2, 3, 4, 5};
//문제
// {"1번", "2번", "3번", "4번", "5번"} 배열을 얻을 수 있게 해주세요.
String[] str = Arrays.stream(arr)
.mapToObj(n -> n + "번")
.toArray(String[]::new);//그냥 toArray 시 Object 타입으로 반환
for(String s : str){
System.out.println(s);
}
}
}
✅ mapToObj(), toArray() 사용
✅ 그냥 toArray 시 Object 타입으로 반환하므로 타입 알려줘야 함
📌 문제 3
리스트 활용
- 남자들의 나이의 합
- 남자들의 나이 평균
- 남자들의 이름 출력
class JavaStream {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person(1, "Alice", 20, 'F'));
people.add(new Person(2, "Bob", 25, 'M'));
people.add(new Person(3, "David", 35, 'M'));
// 문제
// 1. 남자들의 나이의 합
int sum = people.stream()
.filter(person -> person.getGender() == 'M')
.mapToInt(person -> person.getAge()) //Person 객체 이므로 연산 바로 안됨
.sum(); //IntStream에서 제공하는 연산
System.out.println("남자들의 나이 합: " + sum);
// 2. 남자들의 나이 평균
double avg = people.stream()
.filter(person -> person.getGender() == 'M')
.mapToInt(person -> person.getAge()) //Person 객체 이므로 연산 바로 안됨
.average() //IntStream에서 제공하는 연산
.orElse(0.0); //값이 없으면 기본값 0.0 반환
System.out.println("남자들의 나이 평균: " + avg);
// 3. 남자들의 이름 출력
people.stream()
.filter(p -> p.getGender() == 'M')
.map(p -> p.getName())
.forEach(System.out::println);
}
}
class Person {
private int id;
private String name;
private int age;
private char gender;
public Person(int id, String name, int age, char gender) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public char getGender() {
return gender;
}
}
✅ mapToInt(), sum(), average(), orElse(), filter(), map(), forEach() 사용
✅ Person 객체 이므로 연산 바로 안됨
✅ mapToInt로 변환하여 IntStream에서 제공하는 연산 사용
🔍 예제
Optional<> : 타입
class JavaStream {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person(1, "Alice", 20, 'F'));
people.add(new Person(2, "Bob", 25, 'M'));
people.add(new Person(3, "David", 35, 'M'));
//Optional => 있을지도, 없을지도 **많이 사용
Optional<Person> target = people.stream()
.filter(p -> p.getId() == 2)
.findFirst(); //Optional로 나옴
if(target.isPresent()) { //존재할 때만 실행
Person realTarget = target.get();
System.out.println(target.get().getName());
}
Person target2 = people.stream()
.filter(p -> p.getId() == 2)
.findFirst()
.orElseThrow(); //없을 경우 예외 던질수도
//.orElse(null);
}
}
}
✅ Optional<> : 있을지도, 없을지도 모른다.
✅ finFirst() : 첫 번째 요소 찾음
✅ isPresent() : 해당 Optional 객체에 값이 존재하면 true, 없으면 false ➡️ 즉, 값이 존재할 때만 실행하기 위해 체크할 수 있는 조건
💡 값만 검사하고 끝 / 값이 있을 때 실행할 동작은 별도로 작성
✅ orElseThrow() : 값이 없으면 예외 던짐
728x90
반응형
