JAVA/Java Stream
Stream 객체 값 변경 예제
lovineff
2020. 11. 30. 16:54
아래와 같이 사용하고, map().collect()를 사용하지 않아도 된다.
String, Integer는 아래와 같은 방식으로는 구현이 불가능하며, map().collect()를 사용하자
static class Person{
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Test
void test(){
List<Person> personList = Arrays.asList(new Person("1"), new Person("2"));
// 객체 값 변경 전 출력
personList.forEach(person -> System.out.println(person.getName()));
System.out.println("--------");
// 객체 값 변경
personList.stream().forEach(person -> person.setName(person.getName() + " aa"));
// 객체 값 변경 후 출력
personList.forEach(person -> System.out.println(person.getName()));
}
실제 적용 사례
// 게시글 목록 조회
List<GiantArticle> giantArticleList = giantArticleMapper.getArticleInQuery(articleCommandByList);
// 첨부파일이 있는 경우에만 첨부파일 조회
giantArticleList
.parallelStream()
.filter(giantArticle -> giantArticle.getFileCnt() > 0 || giantArticle.getMultimediaCnt() > 0)
.forEach(giantArticle -> getArticleMetaList(new ArticleCommand(articleCommandByList.getBbsId(), giantArticle.getArticleId()))
.stream()
.filter(Objects::nonNull)
.findFirst()
.ifPresent(articleMeta ->{
giantArticle.setAttachFiles(articleMeta.getAttachFiles());
giantArticle.setMultiMedias(articleMeta.getMultiMedias());
}
)
);
return giantArticleList;