인프런 커뮤니티 질문&답변

katd6님의 프로필 이미지
katd6

작성한 질문수

더 자바, Java 8

Stream 소개

Stream 이 처리하는 데이터 소스 변경

작성

·

270

3

안녕하세요 강의 정말 잘 듣고있습니다! 

Stream 속성중에 2번쨰, 원본 데이터 소스는 변경하지 않는다고 레퍼런스에 적혀있어서 학습용도로 혼자 공부하면서 테스트해보았는데, 

Functional in nature. An operation on a stream produces a result, but does not modify its source.

정말 원본 데이터가 안바뀌는지 궁금해서 해보았습니다. 

List<Food> foods = new ArrayList<>();
foods.add(new Food("Pizza",200));
foods.add(new Food("Bob",100));
foods.add(new Food("Chicken",400));

List<Food> result = foods.stream().map((food) -> {
food.setName("changed");
return food;
}).collect(Collectors.toList());

위 코드를 실행했을떄 collection내에 원본 객체들이 변경되지 않을거라고 생각했는데,  결과를 출력해보니 collection내 원본객체들이 모두 변경되어서 제가 뭔가 잘못 이해한 부분이 있는 것 같아서 질문드립니다  

답변 3

2

백기선님의 프로필 이미지
백기선
지식공유자

리스트 안에 들어있는 원본 데이터인 Food 인스턴스는 안바꼈어요.

다만 setter를 사용해서 Food 인스턴스 안에 있는 name은 바뀌었죠.

 

 

0

저도 헷갈렸는데 foods 와 result 였네요. 질문과 답변 감사합니다!

0

katd6님의 프로필 이미지
katd6
질문자

넵 이해됐습니다 감사합니다!

katd6님의 프로필 이미지
katd6

작성한 질문수

질문하기