Java List 정렬, 그룹 구성 등

3169 단어 JAVA
실체 류 쌍 상이 있다 고 가정 하 다
    List list = UserServer.getList();

무 거 운 것 을 제거 하고 중복 대상 (속성 마다 값 이 같 음) 을 제거 합 니 다. 대상 User 의 equals 와 hashCode 방법 을 먼저 다시 쓰 는 것 이 중요 합 니 다.
    List distinctList = list.stream().distinct().collect(Collectors.toList());

정렬, id 리 셋 에 따라 정렬, 리 셋 하려 면: (a, b) -> b. getId () - a. getId () 로 변경 합 니 다.a 와 b 는 모두 변수 이름 (원 하 는 대로 이름 을 지 을 수 있 음) 입 니 다. 모두 list 의 대상 인 스 턴 스 입 니 다.
    List sortList = list.stream().sorted((a, b) -> a.getId() - b.getId()).collect(Collectors.toList());

필터, 자신의 요구 에 따라 list 의 데 이 터 를 선별 합 니 다. 예 를 들 어 제 가 불합격 (60 점 이하) 한 사람 을 선별 하고 t 를 인 스 턴 스 로 합 니 다.
    List filterList = list.stream().filter(t -> t.getScore() < 60).collect(Collectors.toList());

map, 대상 의 특정한 요 소 를 추출 합 니 다. 예 를 들 어 저 는 모든 사람의 name 을 취 했 습 니 다. list 의 유형 에 대응 하 는 것 을 주의 하 십시오. id 나 반 을 취 했 으 면 integer 형식 이 어야 합 니 다.
    List mapList = list.stream().map(t -> t.getName()).collect(Collectors.toList());

모든 사람의 점 수 를 통계 하 는 것 과 주로 제 가 설정 한 점수 속성 은 double 유형 이기 때문에 mapToDouble 을 사용 합 니 다. int 유형 이 라면 mapToInt 를 사용 해 야 합 니 다.
    double sum = list.stream().mapToDouble(t -> t.getScore()).sum();
    int count = list.stream().mapToInt(t -> t.getId()).sum();

그룹 을 나 누고 필드 의 속성 에 따라 list 를 나 눕 니 다.
    Map> map = list.stream().collect(Collectors.groupingBy(t -> t.getGrade()));
    System.out.println("     "+map);
    /*    map  ,             */
    for(Map.Entry> entry : map.entrySet()){
        System.out.println("key:"+entry.getKey());
        System.out.println("value:"+entry.getValue());
    }

다 중 조 를 나 누 려 면 먼저 학년 별로 조 를 나 눈 다음 에 반 별로 조 를 나눈다.
    Map>> groupMap = list.stream().collect(Collectors.groupingBy(t -> t.getGrade(), Collectors.groupingBy(t -> t.getClasses())));
    
    System.out.println("          :"+groupMap);
    System.out.println("        list:"+groupMap.get(1).get(1));

다 중 그룹 은 일반적으로 다 중 그룹 을 나 눈 후에 모두 통 계 를 위해 서 이다. 예 를 들 어 각 학년, 각 반 의 총 점 수 를 통계 하 는 것 이다.
    Map> sumMap = list.stream().collect(Collectors.groupingBy(t -> t.getGrade(), Collectors.groupingBy(t -> t.getClasses(), Collectors.summingDouble(t -> t.getScore()))));
    System.out.println(sumMap);
    System.out.println("          :"+sumMap.get(1).get(1));

stream 은 체인 식 입 니 다. 이런 기능 들 은 함께 사용 할 수 있 습 니 다. 예 를 들 어 각 학년 의 각 반 의 합격 인원 을 계산 할 수 있 습 니 다.
    Map> integerMap = list.stream().filter(t -> t.getScore() >= 60).collect(Collectors.groupingBy(t -> t.getGrade(), Collectors.groupingBy(t -> t.getClasses(), Collectors.counting())));
    System.out.println("           :"+integerMap.get(1).get(1));

좋은 웹페이지 즐겨찾기