Pada umumnya jika kita mempunyai List/Collection yang berisikan numerik. Kemudian ingin menjumlahkannya, pada bahasa pemrograman Java umumnya menggunakan loop, baik itu menggunakan for ataupun while. Kemudian kita membuat variabel tampungan lalu menjumlahkannya. Salah satu fitur Java 8 adalah adanya fitur stream pada Collection sehingga kita memiliki opsi lain dalam melakukan pengulangan / loop semisalnya untuk kasus penjumlahan. Artikel ini akan membahas beberapa cara melakukan sum menggunakan stream di List.
Menggunakan Loop biasa
Menggunakan loop dan index
private static Integer nativeSumIndex() {
Integer sum = 0;
for(int i = 0; i < listInteger.size(); i++) {
sum += listInteger.get(i);
}
return sum;
}
Menggunakan loop for each
private static Integer nativeSum() {
Integer sum = 0;
for(Integer num : listInteger) {
sum += num;
}
return sum;
}
Menggunakan Stream
Stream.reduce()
Teknik pertama menggunakan Stream.reduce(), ada beberapa teknik yang bisa digunakan pada reduce. Pertama menggunakan lambda (a, b) -> a + b. Kedua menggunakan static method sum pada class java.lang.Integer. Ketiga membuat method static sendiri add(int a, int b).
public class SumStream {
private static List<Integer> listInteger = new ArrayList<>();
//...
public static int add(int a, int b) {
return a+b;
}
//...
public static void main(String[] args) {
//...
// reduce
System.out.println("menggunakan reduce");
System.out.println(listInteger.stream().reduce(0, (a, b) -> a + b));
System.out.println(listInteger.stream().reduce(0, Integer::sum));
System.out.println(listInteger.stream().reduce(0, SumStream::add));
//...
}
}
Stream.collect()
Teknik selanjutnya bisa menggunakan Stream.collect yang kemudian dilemparkan ke dalam Collectors
public class SumStream {
private static List<Integer> listInteger = new ArrayList<>();
//...
public static int add(int a, int b) {
return a+b;
}
//...
public static void main(String[] args) {
//...
// collect
System.out.println("menggunakan collect");
System.out.println(listInteger.stream()
.collect(
Collectors.summingInt(Integer::intValue)
)
);
//...
}
}
mapToInt (IntStream)
Mengubah stream collection ke dalam bentuk class IntStream. kemudian menggunakan method sum yang ada pada kelas tersebut.
public class SumStream {
private static List<Integer> listInteger = new ArrayList<>();
private static void generateList() {
if(listInteger == null || listInteger.isEmpty()) {
Integer[] arrInt = {10, 20, 15, 35, 25, 50};
listInteger = Arrays.asList(arrInt);
}
}
//...
public static void main(String[] args) {
generateList();
//...
//mapToInt
System.out.println("menggunakan mapToInt ");
System.out.println(listInteger.stream().mapToInt(Integer::intValue).sum());
System.out.println(listInteger.stream().mapToInt(Integer::valueOf).sum());
}
}
Hasil Running Program
Anda bisa melihat source codenya di github berikut.
Sumber:
- https://www.baeldung.com/java-stream-sum diakses 27 Mei 2024
- https://www.geeksforgeeks.org/sum-list-stream-filter-java/ diakses 27 Mei 2024
Posting Komentar untuk "Melakukan Penjumlahan (Sum) Menggunakan Stream Java"
Berilah komentar, saran, dan kritik dengan bijak