JDK 1.8 Lambda 표현식 집합

2734 단어 성능
jdk1.8에서 lambda 표현식은 집합의 실용적인 조작 방법을 제공했다. 함수식 프로그래밍은 많은 번잡한foreach 코드를 줄일 뿐만 아니라 간단명료하고 알기 쉽다.
@Data
public class User {

   private String userId;
   private String username;
   private String nickName;
   private String password;
   private String picPath;
   private String status;
   private String sessionId;
   private Date createTime;
   private Date updateTime;
   private int age;
   private BigDecimal memberNum;
@Override
   public String toString() {
      return "User [userId=" + userId + ", username=" + username
            + ", nickName=" + nickName + ", password=" + password
            + ", picPath=" + picPath + ", status=" + status
            + ", sessionId=" + sessionId + ", createTime=" + createTime
            + ", updateTime=" + updateTime + ", age=" + age + "]";
   }
}

위의 객체를 작성하는 경우(List userList는 비어 있지 않음):
1. 지정된 필드를 통해 Collectors를 그룹화합니다.groupingBy().
Map> groupByStatus = userList.stream().collect(Collectors.groupingBy(User::getStatus));
for (Map.Entry> entry : groupByStatus.entrySet()) {             String status = entry.getKey();             List userList = entry.getValue();
}
2、조건을 통해 필터 필터().
List userListByStatus = userList.stream().filter(t -> t.getStatus().equals("100")).collect(Collectors.toList());
3、list의 한 필드를 가져와서 새 list를 조립합니다.
List userIdList = userList.stream().map(t -> t.getUserId()).collect(Collectors.toList());
4、distinct를 다시 제거합니다().
List userIdList = userList.stream().distinct().collect(Collectors.toList());
5, 단일 필드 다중 필드 정렬sort().
userList.sort(Comparator.comparing(User::getUserId));
userList.sort(Comparator.comparing(User::getUserId).thenComparing(User::getStatus));
{
참고: 정렬 필드를null값으로 선택하면 정렬은userList.sort(Comparator.comparing(User::getUserId,Comparator.nullsFirst(Comparator.naturalOrder())))
}
6,list 회전맵.
Map userMap = userList.stream().collect(Collectors.toMap(User::getUserId, t -> t,(k1,k2)->k1));
(그 중에서 집합 대상 키가 무거우면 (k1,k2)->k1에 따라 설정할 수 있습니다.)
7. 화해를 구한다
기본 유형: int sumAge = userList.stream().mapToInt(User::getAge).sum();
기타: BigDecimal totalMembernum = userList.stream().map(User::getMemberNum).reduce(BigDecimal.ZERO, BigDecimal::add);
(여기서 bigDecimal 객체가 null이면 Filter()가 빈 포인터를 필터링합니다.)
8. 가장
Date minDate = userList.stream().map(User::getCreateTime).min(Date::compareTo).get();
Date maxDate = userList.stream().map(User::getCreateTime).max(Date::compareTo).get();
User maxUp = userList.stream().max(Comparator.comparingInt(User::getAge)).get();

좋은 웹페이지 즐겨찾기