My Melody Is Cute 스트림 연습문제
본문 바로가기

실습👁️‍🗨️/문제

스트림 연습문제

1.
public class Solution { 
  public int computeSumOfAllElements(List<Integer> list){
    //TODO.. 스트림 생성 총 합 리턴 비어있는 경우 0을 반환
    return list.stream()
           .mapToInt(number-> number) //int로 매핑하고새로운 IntStream구성
           .sum(); //총합
 
sum()메서드는 비어있는스트림에 대해서도 합을 계산할 수 있고 결과는 0이된다
입력 데이터가 비어있는 경우에 대한 처리를 기본적으로 지원
 

2

public class Solution { 
  public double computeAverageOfNumbers(List<Integer> list) {
    //TODO..Integer요소 List 입력받아 평균을 리턴
    return list.stream()
    .mapToInt(number -> number)//int 로 변환
    .average()
    .orElse(0.0);
  }
}

 

3

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(element->element%2==0)
    .collect(Collectors.toList());//스트림요소를 리스트로 모음
  }
}

collect(Collectors.toSet())를 사용하면 스트림 요소를 집합(Set)으로 모을 수 있고,

collect(Collectors.toMap())를 사용하면 스트림 요소를 맵(Map)으로 모을 수 있다

collect(Collectors.toList())

이렇게 collect 메소드와 컬렉터를 사용하면 스트림의 처리 결과를 다양한 형태로 저장하고 활용할 수 있음

 

4

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

public class Solution { 
  public long computeCountOfFemaleMember(List<Member> members) {
    //구현된 Member 클래스의 getName(), getGender() 메소드로 해당 Member 클래스의 name, gender를 확인할 수 있습니다.
    //TODO..Member리스트를 입력받아 여성회원의 수 리턴
    return members.stream()
    .filter(member->member.getGender().equals("Female"))
    .count();
  }

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

		public Member(String name, String gender) {
			this.name = name;
			this.gender = gender;
		}
		
    public String getName() {
      return name;
    }

    public String getGender() {
      return gender;
    }
  }
}

람다식때문에 헷갈린다..

 

5

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(member->"Male".equals(member.getGender()))
    .mapToDouble(Member::getAge)//나이메서드를 참조해서 더블값으로 변환
    .average()
    .orElse(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;
    }
  }
}

 

6

import java.util.*;

public class Solution { 
  public String[] makeUniqueNameArray(List<String> names) {
    //TODO..중복요소 제거후 정렬 String타입 배열리턴
    return names.stream()
    .distinct()//중복제거
    .sorted()//정렬
    .toArray(String[]::new);//스트링배열생성
  }
}

7

import java.util.*;

public class Solution { 
  public String[] filterName(List<String> names) {
    //TODO..중복제거 김씨만 남기기(필터) 정렬-오름차순 가나다 
    //반환

    return names.stream()
     .distinct() //중복제거
     .filter(name -> name.startsWith("김")) //첫시작 문자열이 해당입력값일때 제거해줌
     .sorted() //자동 오름차순
     .toArray(String[]::new); //스트림타입을 문자열로 변환
     //문자열배열 생성자 new
  }
}

 

 

더보기
  1. endsWith(String str): 주어진 문자열 str로 끝나는지를 확인합니다. 예를 들어, "Hello, World!"가 "World!"로 끝나는지 확인할 수 있습니다.
  2. contains(CharSequence sequence): 주어진 문자열 또는 문자열 시퀀스 sequence가 해당 문자열에 포함되는지를 확인합니다. 예를 들어, "Hello, World!" 문자열에 "Hello"가 포함되는지 확인할 수 있습니다.
  3. indexOf(String str): 주어진 문자열 str이 해당 문자열에서 처음으로 나타나는 인덱스를 반환합니다. 만약 문자열에 포함되어 있지 않다면 -1을 반환합니다.
  4. lastIndexOf(String str): 주어진 문자열 str이 해당 문자열에서 마지막으로 나타나는 인덱스를 반환합니다. 만약 문자열에 포함되어 있지 않다면 -1을 반환합니다.
  5. substring(int beginIndex, int endIndex): 문자열을 특정 범위의 문자열로 잘라내어 반환합니다. beginIndex는 잘라낼 부분의 시작 인덱스를 나타내며, endIndex는 잘라낼 부분의 끝 인덱스를 나타냅니다.
  6. replace(CharSequence target, CharSequence replacement): 문자열 내에서 target 문자열을 찾아 replacement 문자열로 대체합니다.
  7. toLowerCase() 및 toUpperCase(): 문자열을 각각 소문자 또는 대문자로 변환하는 메서드입니다.

 

8

import java.util.*;

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

 

 

더보기
  1. getAsInt:
    • getAsInt 메서드는 OptionalInt 객체에 값이 포함되어 있을 때, 그 값을 추출하여 반환합니다.
    • 만약 OptionalInt 객체가 값을 포함하고 있지 않을 경우, NoSuchElementException 예외를 발생시킵니다.
    • 주로 값이 반드시 존재해야 하는 상황에서 사용됩니다. 즉, 값이 없을 경우 예외를 발생시키는 방식으로 처리합니다.
  2. orElse:
    • orElse 메서드는 OptionalInt 객체에 값이 포함되어 있을 때, 그 값을 반환합니다.
    • 만약 OptionalInt 객체가 값을 포함하고 있지 않을 경우, 지정된 기본값을 반환합니다.
    • 주로 값이 없을 때 기본값을 제공하여 안전하게 처리하고자 할 때 사용됩니다.

요약하면, getAsInt은 값이 반드시 존재해야 하는 상황에서 사용되며, 값이 없을 경우 예외를 발생시키는 방식으로 처리합니다. 반면에 orElse는 값이 없을 때 기본값을 제공하여 안전하게 처리하고자 할 때 사용

 

9

import java.util.*;

public class Solution { 
  public int findLongestLength(String[] strArr) {
    //TODO..

    return Arrays.stream(strArr)
    .mapToInt(d->d.length())
    .max()
    .orElse(0);
  }
}

 

10

import java.util.*;
import java.util.stream.*;

public class Solution { 
  public List<String> mergeTwoStream(List<String> list1, List<String> list2) {
    //TODO..
    Stream<String> stream1 = list1.stream(); // list1의 스트림을 생성합니다.
    Stream<String> stream2 = list2.stream(); // list2의 스트림을 생성합니다.

    Stream<String> stream3 = Stream.concat(stream1, stream2); // 두 개의 스트림을 합칩니다.
    return stream3.collect(Collectors.toList()); // 합쳐진 스트림을 List형태로 리턴합니다.
    
  }
}

모르겠다 concat

 

더보기

concat() 메서드를 사용하면 두 개의 스트림을 연결하여 하나의 스트림을 만들 수 있습니다. 즉, 첫 번째 스트림(a)의 요소를 모두 처리한 후 두 번째 스트림(b)의 요소를 처리하게 됩니다. 이를 통해 여러 스트림을 순차적으로 처리하고 연결할 수 있습니다.

주로 concat() 메서드는 스트림에서 데이터를 합치거나 조합해야 하는 상황에서 사용됩니다. 예를 들어, 두 개의 리스트나 배열을 스트림으로 변환한 후 이를 하나의 스트림으로 합쳐서 연산을 수행할 때 유용하게 활용될 수 있습니다.

또한, concat() 메서드는 중간 연산(Intermediate Operation)이 아니므로, 다른 스트림 연산과 함께 연결하여 사용할 수 있습니다.

 

 

 

 

11

import java.util.*;
import java.util.stream.*;

public class Solution { 
  public List<Integer> makeElementDouble(List<Integer> list) {
    //TODO..
    return list.stream()
    .map(element->element*2)
    .collect(Collectors.toList());
  }
}

 

12

import java.util.*;

public class Solution { 
  public boolean isHot(int[] temperature) {
    //TODO..
    if (temperature.length != 7){
      return false;
    }
    //스트림으로 배열중 30이상인 요소의 개수를 셈
    long hotDays = Arrays.stream(temperature)
      .filter(temp->temp>=30) //30이상인 요소만 골라서 새로운 스트림 생성
      .count();
    if(hotDays>=3){ //30이상인 요소의 개수가 3개이상인 경우 true 아닌경우 false
      return true;
    }else{
      return false;
    }
    

  }
}

이건 진짜...좀 그래..

 

 

13

import java.util.*;
import java.util.stream.*;

public class Solution { 
  public List<String> findPeople(List<String> male, List<String> female, String lastName) {
    //TODO..
    return Stream.concat(male.stream(),female.stream())//남녀리스트를 스트림으로 변환후 결합
    .distinct()//중복제거
    .filter(name->name.startsWith(lastName))
    .sorted()//정렬
    .collect(Collectors.toList());
  }
}

 

'실습👁️‍🗨️ > 문제' 카테고리의 다른 글

컬렉션 연습문제  (0) 2023.11.01
연습문제(배열)  (0) 2023.10.19
연습문제  (0) 2023.10.12
연습문제  (0) 2023.10.11