java 8 리스트 맵,그룹,필터 등 동작 을 신속하게 실현

자바 8 의 새로운 특성 을 이용 하여 간결 하고 효율 적 인 코드 로 데이터 처 리 를 실현 할 수 있 습 니 다.
Apple 대상 1 개 정의:

public class Apple {
  private Integer id;
  private String name;
  private BigDecimal money;
  private Integer num;
  public Apple(Integer id, String name, BigDecimal money, Integer num) {
    this.id = id;
    this.name = name;
    this.money = money;
    this.num = num;
  }
}
테스트 데이터 추가:

List<Apple> appleList = new ArrayList<>();//  apple    
 
Apple apple1 = new Apple(1,"  1",new BigDecimal("3.25"),10);
Apple apple12 = new Apple(1,"  2",new BigDecimal("1.35"),20);
Apple apple2 = new Apple(2,"  ",new BigDecimal("2.89"),30);
Apple apple3 = new Apple(3,"  ",new BigDecimal("9.99"),40);
 
appleList.add(apple1);
appleList.add(apple12);
appleList.add(apple2);
appleList.add(apple3);
1.조별
List 안의 대상 요 소 는 특정한 속성 으로 그룹 을 나 눕 니 다.예 를 들 어 id 로 그룹 을 나 누 어 id 와 같은 것 을 함께 놓 습 니 다.

//List  ID   Map<Integer,List<Apple>>
Map<Integer, List<Apple>> groupBy = appleList.stream().collect(Collectors.groupingBy(Apple::getId));
 
System.err.println("groupBy:"+groupBy);
{1=[Apple{id=1, name='  1', money=3.25, num=10}, Apple{id=1, name='  2', money=1.35, num=20}], 2=[Apple{id=2, name='  ', money=2.89, num=30}], 3=[Apple{id=3, name='  ', money=9.99, num=40}]}

2、List 전환 지도
id 는 key 이 고 apple 대상 은 value 입 니 다.이렇게 할 수 있 습 니 다.

/**
 * List -> Map
 *       :
 * toMap           key,   Duplicate key ....
 * apple1,apple12 id  1。
 *     (k1,k2)->k1    ,      key,   key1,  key2
 */
Map<Integer, Apple> appleMap = appleList.stream().collect(Collectors.toMap(Apple::getId, a -> a,(k1,k2)->k1));
  appleMap
{1=Apple{id=1, name='  1', money=3.25, num=10}, 2=Apple{id=2, name='  ', money=2.89, num=30}, 3=Apple{id=3, name='  ', money=9.99, num=40}}
3.필터 필터
집합 에서 조건 에 맞 는 요 소 를 걸 러 냅 니 다:

//          
List<Apple> filterList = appleList.stream().filter(a -> a.getName().equals("  ")).collect(Collectors.toList());
 
System.err.println("filterList:"+filterList);
[Apple{id=2, name='  ', money=2.89, num=30}]
4.화 해 를 구하 다
집합 중의 데 이 터 를 특정한 속성 에 따라 구 합 니 다.

//      
BigDecimal totalMoney = appleList.stream().map(Apple::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
System.err.println("totalMoney:"+totalMoney); //totalMoney:17.48
5.스 트림 의 최대 최소 값 찾기
Collectors.maxBy 와 Collectors.minBy 는 흐름 의 최대 또는 최소 값 을 계산 합 니 다.

Optional<Dish> maxDish = Dish.menu.stream().
   collect(Collectors.maxBy(Comparator.comparing(Dish::getCalories)));
maxDish.ifPresent(System.out::println);
 
Optional<Dish> minDish = Dish.menu.stream().
   collect(Collectors.minBy(Comparator.comparing(Dish::getCalories)));
minDish.ifPresent(System.out::println);
6.무 거 운 것 을 제거한다

import static java.util.Comparator.comparingLong;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toCollection;
 
//   id  
   List<Person> unique = appleList.stream().collect(
        collectingAndThen(
            toCollection(() -> new TreeSet<>(comparingLong(Apple::getId))), ArrayList::new)
    );
다음 표 는 Collectors 류 의 정적 공장 방법 을 보 여 줍 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기