23.03.09 Stream 연습 문제

김민성·2023년 3월 9일
0

합계 구하기 : 기본형 스트림의 sum() / 일반 스트림에서 reduce()

list.stream().reduce(0, (a, b -> a+b));

평균 구하기 : average() optional double 형태 -> double 형태로 바꿔주어야함

list.stream().average().orElse(0);
	-> 값이 있으면 getAsDuble과 같이 작용 없으면 0 return

🍉 List를 입력받아 요소의 총 합을 리턴

package com.codestates.coplit; 
import java.util.*;

public class Solution { 
  public int computeSumOfAllElements(List<Integer> list){
    //TODO..
    return list.stream().mapToInt(el -> el).sum();
  }
}

mapToInt()로 Optional 타입을 기본형으로 바꿔줌

🍉 List를 입력받아 짝수 요소만 추출한 List를 리턴

package com.codestates.coplit; 
import java.util.*;
import java.util.stream.Collectors;

public class Solution { 
  public List<Integer> filterOddNumbers(List<Integer> list){
    //TODO..
    return list.stream().filter(el -> el % 2 == 0).collect(Collectors.toList());
  }
}

filter()로 짝수 요소만 추출해서 collect()로 요소를 리스트로 리턴

🍉 List를 입력받아, 남성 회원들의 평균 나이를 리턴

package com.codestates.coplit; 
import java.util.*;

public class Solution { 
  public double computeAverageOfMaleMember(List<Member> members) {
    //구현된 Member 클래스의 getName(), getGender(), getAge() 메소드로 해당 Member 클래스의 name, gender, age를 확인할 수 있습니다.
    //TODO..
    return members.stream().filter(el -> el.getGender().equals("Male")).mapToInt(el -> el.getAge()).average().orElse(0.0);
    
  }

	// 아래 코드는 변경하지 마세요.
  static class Member {
    String name;
    String gender;
    int age;

    public Member(String name, String gender, int age) {
      this.name = name;
      this.gender = gender;
      this.age = age;
    }

    public String getName() {
      return name;
    }

    public String getGender() {
      return gender;
    }

    public int getAge() {
      return age;
    }
  }
}

filter()로 남자를 필터링하고 average()를 사용해서 평균을 구하고 orElse(0)으로 요소가 있으면 getAsDouble을 리턴하고 요소가 없으면 0을 리턴함

🍉 List를 입력받아 중복을 제거하고 정렬한 후 String 타입을 요소로 갖는 배열로 리턴

package com.codestates.coplit; 
import java.util.*;

public class Solution { 
 public String[] makeUniqueNameArray(List<String> names) {
   //TODO..
   return names.stream().distinct().sorted().toArray(String[]::new);
 }
}

distinct()로 중복을 제거, sorted()로 내림차순 정렬한 후 String 타입을 요소로 갖는 배열로 리턴

🍉 int 타입을 요소로 가지는 배열을 입력받아 가장 큰 요소를 리턴

package com.codestates.coplit; 
import java.util.*;

public class Solution { 
  public Integer findBiggestNumber(int[] arr) {
    //TODO..
    if (arr.length == 0) return null;

    return Arrays.stream(arr).max().getAsInt();
  }
}

max()로 최댓값 가져와서 getAsInt()로 기본형 리턴

🍉 String 타입을 요소로 가지는 List 두 개를 입력받아, 스트림을 이용해 하나의 List로 합친 결과를 리턴

package com.codestates.coplit; 
import java.util.*;
import java.util.stream.*;

public class Solution { 
  public List<String> mergeTwoStream(List<String> list1, List<String> list2) {
    //TODO..

    return Stream.concat(list1.stream(),list2.stream()).collect(Collectors.toList());
  }
}

concat()으로 list를 합쳐서 collect()로 list 리턴

0개의 댓글