ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [java] 자주쓰는 람다식 Lambda (stream 인터페이스) 예제
    Java 2023. 2. 12. 22:09
    반응형

    게시판 목록에서 게시물 제목이 "중"으로 시작하는 것을 모두 추출

    //게시판 목록
    List<BbsDto> list = bbsDao.selectListAllBbs();
    
    
    //	filter 메서드는 컬렉션을 조건에 의한 선택을 할때 유용하다.
    //	filter 메서드는 boolean 결과를 리턴하는 람다 표현식이 필요하다.
    //	예제의 collection 메서드는 filter 표현식에 나온 값을 list로 변경한다.
    //	게시판 제목이 '중'로 시작하는 배열을 모두 출력
    
    final List<BbsDto> result_startsWithS = 
        list.stream().filter(v -> v.getTitle().startsWith("중"))
        .collect(Collectors.toList());
        
    log.info(result_startsWithS.toString());

     

    게시판 목록에서 게시판번호가 50보다 큰것 모두 추출

    //게시판 목록
    List<BbsDto> list = bbsDao.selectListAllBbs();
    
    //게시판번호가 50보다 큰것 모두 추출하기
    List<BbsDto> result_example = list.stream()
        .filter(v -> v.getBno() > 50)
        .collect(Collectors.toList());
        
    log.info(result_example.toString());

     

    게시판 목록에서 제목이 "중복"이고 게시물번호가 100보다 큰것 모두 추출하기

    //제목이 중복이고 게시판번호가 100보다 큰것 모두 추출하기
    List<BbsDto> result_example2 = list.stream()
        .filter(v -> "중복".equals(v.getTitle()) && v.getBno() > 100)
        .collect(Collectors.toList());

     

    리스트내에서 name키의 중복되는 값이 있을경우 해당 열 제거하기

    // Vo 작성
    public class Member {
        private int id;
        private String name;
        private String phone;
    }
    
    // 리스트에 넣기 1.방법
    List<Member> members = Arrays.asList(
        new Member(1, "김유신", "010-1234-5678"),
        new Member(2, "이순신", "010-2345-6789"),
        new Member(3, "유관순", "010-3456-7890"),
        new Member(1, "김유신", "010-1234-4321"),
        new Member(2, "이순신", "010-2345-5555")
    );
    
    // 리스트에 넣기 2.방법
    List<Member> members = List.of(
        new Member(1, "김유신", "010-1234-5678"),
        new Member(2, "이순신", "010-2345-6789"),
        new Member(3, "유관순", "010-3456-7890"),
        new Member(1, "김유신", "010-1234-4321"),
        new Member(2, "이순신", "010-2345-5555")
    );
    
    둘의 차이는?
    
    List.of와 Arrays.asList는 두 가지 다른 방법으로 리스트를 생성하는 데 사용되는 메서드이다. 
    그러나 이들 간에 몇 가지 중요한 차이점이 있다.
    
    1. 가변성 (Mutability):
    List.of: 반환된 리스트는 불변(immutable)이다. 따라서 요소를 추가하거나 제거하는 것이 불가능하다.
    Arrays.asList: 반환된 리스트는 고정 크기로, 크기를 변경할 수 없지만 내부 배열은 수정 가능하다. 즉, 요소의 값을 변경하는 것은 가능하지만, 크기를 변경하는 것은 불가능하다.
    
    2. Null 처리:
    List.of: null 값을 요소로 사용하려고 시도하면 NullPointerException이 발생한다.. 이 메서드는 요소로 null을 허용하지 않는다.
    Arrays.asList: null 값을 요소로 사용할 수 있다.
    
    3. 원본 배열과의 관계:
    List.of: 내부적으로는 새로운 객체를 생성하며, 원본 배열과의 관계가 없다.
    Arrays.asList: 반환된 리스트는 원본 배열에 대한 뷰(view)이므로, 리스트를 수정하면 원본 배열도 변경된다. 반대로, 원본 배열을 수정하면 리스트에도 영향을 미친다.
    
    
    // List.of 예제
    List<String> immutableList = List.of("A", "B", "C");
    // 아래 주석 처리된 코드는 UnsupportedOperationException 발생
    // immutableList.add("D");
    
    // Arrays.asList 예제
    List<String> fixedSizeList = Arrays.asList("A", "B", "C");
    // 아래 주석 처리된 코드는 가능하지만, 크기 변경 불가능
    // fixedSizeList.set(0, "D");
    // fixedSizeList.add("E");  // UnsupportedOperationException 발생
    
    // null 처리
    List<String> nullableList = Arrays.asList("A", null, "C"); // 가능
    // List<String> nonNullableList = List.of("A", null, "C"); // NullPointerException 발생

     

     

    List<Members> distinctMembers = targetList.stream()
        .collect(Collectors.toMap(Members::getMemberName, item -> item, (existing, replacement) -> existing))
        .values()
        .stream()
        .collect(Collectors.toList());

     

    반응형

    댓글

Designed by Tistory.