Melakukan Penjumlahan (Sum) Menggunakan Stream Java


    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 

code di bawah melakukan sum / penjumlahan dengan cara mengambil value dari index, kemudian disimpan pada variabel sum.

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

code di bawah melakukan sum / penjumlahan dengan cara mengambil value setiap item, kemudian disimpan pada variabel sum.
 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:

Posting Komentar untuk "Melakukan Penjumlahan (Sum) Menggunakan Stream Java"