예제로 보는 Lambda

CAOST · August 27, 2018

lambda

foreach

List에 담긴 Transaction 객체에 confirmYn 값을 true로 변경 후 repository에 저장한다.

plain

for(Transaction transaction: transactions) {
  transaction.setConfirmYn(true);
  transactionRepository.save(transaction);
}

lambda

transactions.forEach(o -> {
    o.setConfirmYn(true);
    transactionRepository.save(o);
});

map

List rigGroupUsers에 담긴 RigGroup 객체의 rigGroupUserId.rigGroupSn 값을 List 형태로 변환한다.

plain

List<Long> rigGroupSns = new ArrayList<>();

for(RigGroupUser rigGroupUser: rigGroupUsers) {
  rigGroupSns.add(rigGroupUser.getRigGroupUserId().getRigGroupSn());
}

lambda

rigGroupUsers.stream().map(o -> o.getRigGroupUserId().getRigGroupSn()).collect(Collectors.toList());

mapToLong

rigGpus에 담긴 RigGpu 객체의 hashrate의 총 합을 반환한다.

plain

Long sum = 0L;
for(RigGpu rigGpu: rigGpus) {
  sum = sum + rigGpu.getHashrate();
}

lambda

rigGpus.stream().mapToLong(RigGpu::getHashrate).sum();

functional interface

confirmYnnull이 아닌 경우 Specification Interface를 생성하여 반환한다.

plain

Optional<Boolean> confirmYnOptional = Optional.ofNullable(confirmYn);

if (confirmYnOptional.isPresent()) {
  return new Specification<RigEvent>() {
    @Override
    public Predicate toPredicate(Root<RigEvent> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
      return criteriaBuilder.equal(root.get(RigEvent_.confirmYn), confirmYnOptional.get());
    }
  };
} else {
  return null;
}

lambda

Optional
  .ofNullable(confirmYn)
  .map(
    o -> (Specification<RigEvent>) (root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get(RigEvent_.confirmYn), o)
  ).orElse(null);

Twitter, Facebook