부트캠프/코트스테이츠 백엔드 코스

회고 17일차

태태코 2023. 3. 10. 09:17
반응형

주어진 배열이나 리스트를 정렬된 상태로 출력하고자 할때 --> 

Array.sort(arr);

for(:){
System.out.prinln();

}

을 통해서 출력할 수 있다. 이 코드도 간결하고 깔끔하지만, 이 코드는 원본을 변형시킨다는 단점을 가지고 있다.

 

Stream API를 적용시킨다면.

Stream<String> arr = arr2.stream();

arr.sorted().forEach(~~~); 라고 표현을 할 수있다.

즉 :: Stream API를 사용했을 경우

1. 일회성이다. 

2. 원본 데이터를 변형시키지 않는다.

-->stream은 원본 데이터를 건들지 않는다.

3. 내부 반복으로 작업을 처리한다.

-->  forEach(~~); 반복문이 함수 안에 숨겨져있다.

 

II 람다식

Stream연산은 매개변수로 함수형 인터페이스를 받도록 되어있다.  람다식은 반환값으로 함수형 인터페이스를 반환하기 때문에 둘의 상호작용이 기대가 되는 것이다.

 

// 기본 방식 예시
public String hello() {
    return "Hello World!";
}



// 람다 방식
(매개변수, ...) -> { 실행문 ... }

// 예시
() -> "Hello World!";

 

람다식의 특징:

1. 람다식 내에서 사용되는 지역변수는 모두 상수로 처리가 된다.

2. 람다식으로 선언된 변수명은 다른 변수명과 중복될 수 없다.

 

---> 람다를 적절하게 활용할 경우 가독성이 좋아지고 코드를 간결하게 만들고 , 함수를 만드는 과정이 없어 병렬 프로그래밍이 용이하지만,

너무 많이 사용할 경우 코드가 지저분해지고, 재귀를 받지 않는다.

 

 

함수형 인터페이스

람다의 반환 타입은 함수형 인터페이스다. 

여러개의 디폴트 메서드가 있더라도 , 추상 메서드가 오직 하나면 함수형 인터페이스라고 합니다.

 

 

Stream의 기본 문법.

 

생성 ---> 중간 연산 ----> 최종 연산

 

//생성
Stream<String> stream = Arrays.stream(new String[] {"a","b","c"});


IntStream stream = IntStream.range(4,10);
//rangeClosed(1,10); 10까지 포함

//중간연산
//filter
.filter(v->v==1)
if()// 와 비슷하다고 보면 된다.

//map은 데이터의 형태를 바꾸는 것. 새로운 스트림을 만들어 준다.
-->메서드 실행
.map(s->s.toUpperCase());
--->String이 모두 대문자요소들로 바뀌게된다.

예를들면 기본Stream에서 map을 통하여 int stream으로도 변환이 가능하다.


//sorted
-->말그래도 정렬하는 것이다.
Comparaotr.reversOrder();
역으로 정렬하는 것.

//Distinict
중복을 제거하는 것이다.

//peek
--->중간에 peek을 통하여 연산된 값을 확인하기 위해 사용된다.

//maptoObj , maptoint, --->스트림 변환


//최종
Max/Min/Sum/Average/CountPermalink
int stream이라면 사용가능하다.

collect를 통해서 list로 반환도 가능하다.

그밖에
Collectors.joining() //하나의 문자열에 추가해서 반환
 Collectors.groupingBy() //동일한 요소로 묶기
 Collectors.partitioningBy()// 특정 조건의 참/거짓으로 묶기

FlatMap --> 이중 배열이나 이중 리스트를 stream으로 한번에 받을 때 사용하는 것이다.

 

 reduce(accumulator)

--> for문을 사용하여 int num에 지속적으로 더하는 효과를 주며

ex) .reduce(10,(a,b)->{

}) 라는 형식을 사용할 수 있다.

 

 

---> 병렬 스트림도 있지만 나중에 소개하도록 하겠슴당

쓰레드의 개념과 같이 사용하면 된다.

 

사용예시입니다.

public class Set {
    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;
        }
    }

    public static void main(String[] args) {
        int arr [] = new int[]{1,3,5,7,8,8};
       String arr2[] = new String[]{"장태환","이지원","이승현","오경운","장태환"};
        Arrays.stream(arr).filter(i->i%2==0).forEach(i-> System.out.print(i+" "));
        System.out.println();
       IntStream it = Arrays.stream(arr).filter(i -> i%2!=0);
       it.forEach(name -> System.out.print(name+" "));
       IntStream zz = IntStream.rangeClosed(1,10).distinct().peek(w->System.out.println(w)).limit(5).skip(2);
       zz.forEach(name -> System.out.print(name+" "));

        Stream<String> stream = Arrays.stream(arr2).distinct().map(String::toLowerCase);
        stream.forEach(name -> System.out.print(name+" "));

      IntStream zz = IntStream.rangeClosed(0,10).skip(5).limit(5);
      zz.forEach(name -> System.out.print(name+" "));
        int arr[][] = new int[][]{{1,2},{8,11},{4,44,123,412}};
        Arrays.stream(arr).flatMapToInt(Arrays::stream).sorted().forEach(name -> System.out.println(name));
      king k = ()-> System.out.println("Hell");
       k.hello();
       List<Integer> list = Arrays.asList(1,2,3,4);
       List<Integer> hi =list.stream().mapToInt(Integer::intValue).filter(i->i%2==0).collect(Collectors.toList());
        int arr[] = new int[]{1,2,3,4};
        Arrays.stream(arr).max().orElse(0);

        String str[]=new String[]{"길동이"};
        Arrays.stream(str).mapToInt(String::length).max().getAsInt();
        List<String> liOne = new ArrayList<>();
        liOne.add("A");
        liOne.add("B");
        liOne.add("C");

        List<String> liTwo = new ArrayList<>();
        liTwo.add("D");
        liTwo.add("E");
        liTwo.add("F");

        List<String> me = Stream.of(liOne,liTwo).flatMap(Collection::stream)
                .collect(Collectors.toList());

        String asw = "hello";
        System.out.println( asw.startsWith("h"));;
        HashMap<String,Integer> map = new HashMap<>();
        String s[] = new String[]{"leo","king","kong"};
        String w[] = new String[]{"leo","king"};
        String answer =" ";
        for(String zz:w ){
            map.put(zz,1);
        }
        System.out.println(map);
        for(String ww : s){
           if(!map.containsKey(ww))
               answer+=ww;
        }
        String phonebook[] = new String[]{"119 ,97674223 ,1195524421"};
        Arrays.sort(phonebook);
        System.out.println(phonebook[0]);
        HashMap<Integer,String> map = new HashMap<>();
        for (int i = 0; i < phonebook.length; i++) {
            map.put(i,phonebook[i]);
        }
        for (int i = 0; i < phonebook.length-1; i++) {
            for (int j = i+1; j < phonebook.length; j++) {
                if(map.get(j).contains(map.get(i)))return false;
            }
        }

       List<String> WORDS = Arrays.asList("Tony","a","hULK","B","america","X","nebula","Korea");
        System.out.println(WORDS.stream().collect(Collectors.groupingBy(c->c.charAt(0),Collectors.counting())));

    }
    interface  king{
        void hello();
    }

}
반응형

'부트캠프 > 코트스테이츠 백엔드 코스' 카테고리의 다른 글

회고 18일차  (0) 2023.03.15
대 회고 1  (2) 2023.03.13
회고 15일차  (0) 2023.03.07
회고 14일  (0) 2023.03.06
회고 13일차  (0) 2023.03.02