💡 기존의 많은 언어들이 제공하는 SUM 기능이 Java에는 없다!!
for
문으로 구하기stream
사용하여 lambda
함수 사용하기✔ 주의! 속도적으로는 일반적으로 stream 람다 방식이 loop문보다 비효율적이다.
int sum = 0;
for (int i = 0; i < list.size(); i++)
sum += list.get(i);
return sum;
.size
: 리스트안에 들어있는 원소 수 구하기
- .length
: 배열의 길이(전체 크기!) 구하기
- .length()
: 문자열의 길이 구하기
💡 잠깐!
배열과 리스트는 차이가 있다. 구체적인 내용은 다음 포스팅에서 정리하도록 하고, 이번엔 우선 가장 중요한 차이만 짚고 넘어가자.
📌 Java의 Array vs ArrayList vs List
- Array(배열) : 클래스
- index는 값에 대한 유일무이한 식별자(고유함)
- 객체 생성시 크기 할당 필수
- 길이 조정 불가
- ArrayList : 클래스
- List 인터페이스를 상속받은 클래스 중 하나
- index는 몇 번째 데이터인가를 가리킴 (그 공간이 비면 다른 데이터가 대체 가능)
- 크기 할당 필요 없음! (Java에서는 자동으로 1.5배씩 늘어남)
- List(리스트) : 인터페이스
- 크기가 정해져있다는 배열의 한계로 만들어진 인터페이스
- 동적으로 자료형의 개수를 늘릴 수 있다.
.get(index)
: 이 인덱스의 위치에 있는 객체 반환
int sum = 0;
for(int i : list)
sum += i;
return sum;
for(int i : iterate한 객체)
: iterate한 객체에서 한 개씩 순차적으로 i에 대입되어 for문이 수행됨 : 람다를 활용할 수 있는 기술 중 하나. 데이터의 흐름.
Java 8에서 추가되었다. (이전에는 배열, 컬렉션 인스턴스를 다루는 방법은 for
또는 foreach
문을 돌면서 하나씩 꺼내서 다뤄야 했음)
배열과 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있음
람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있음
👉🏻 즉, 배열과 컬렉션을 함수형으로 처리할 수 있음
간단히 병렬처리(Multi-Threading)가 가능함. 하나의 작업을 둘 이상의 작업으로 잘게 나누어 동시에 진행하는 것이 가능함. 즉, 쓰레드를 이용해 많은 요소들을 한 번에 처리 가능
Stream.of(리스트).mapToInt(i -> i).sum();
: 기본형 특화 스트림에서만 사용 가능함Sream.of(리스트).reduce(0, Integer::sum);
: reduce(초기값, 연산)
형식으로 사용함. 초기값부터 각 원소를 차례대로 순회하며 연산 수행. 이전 연산의 결과를 다음 연산의 초기값으로 넘김import java.util.Arrays;
한 후 Arrays.stream(배열이름).sum();
참고자료