Java 8 Streams API [Part 2]

Chiwa Kantawong (Pea)
3 min readAug 3, 2021

--

ถ้าเรามี List ของ integer อยู่จำนวนหนึ่ง เราต้องการ หาค่า min, max, sum และ average กัน

ถ้าเรายังไม่มี Stream API ถ้าเราจะหาค่า min ก็จะต้องเขียนโปรแกรมยืดยาวประมาณนี้เลย

package com.zengcode.demo;

import java.util.ArrayList;
import java.util.Arrays;

public class StreamApiDemo {

public static void main(String[] args) {

List<Integer> numbers = new ArrayList<>(Arrays.asList(53, 12, 31, 24, 55, 86, 3, 13));

int min = numbers.get(0);
for (int i = 1; i < numbers.size(); i++) {
if (numbers.get(i) < min) {
min = numbers.get(i);
}
}

System.out.println("Min = " + min);
}
}

ต่อไปเรามาลองใช้ Stream API กันครับ

package com.zengcode.demo;

import java.util.ArrayList;
import java.util.Arrays;


public class StreamApiDemo {

public static void main(String[] args) {

List<Integer> numbers = new ArrayList<>(Arrays.asList(53, 12, 31, 24, 55, 86, 3, 13));

int min = numbers.stream()
.mapToInt(i -> i)
.min()
.getAsInt();

System.out.println("Min = " + min);
}
}

ถ้าจะหาค่า max ก็

package com.zengcode.demo;

import java.util.ArrayList;
import java.util.Arrays;


public class StreamApiDemo {

public static void main(String[] args) {

List<Integer> numbers = new ArrayList<>(Arrays.asList(53, 12, 31, 24, 55, 86, 3, 13));

int max = numbers.stream()
.mapToInt(i -> i)
.max()
.getAsInt();

System.out.println("Max = " + max);
}
}

ถ้าจะหาค่า sum

package com.zengcode.demo;

import java.util.ArrayList;
import java.util.Arrays;


public class StreamApiDemo {

public static void main(String[] args) {

List<Integer> numbers = new ArrayList<>(Arrays.asList(53, 12, 31, 24, 55, 86, 3, 13));

int sum = numbers.stream()
.mapToInt(i -> i)
.sum();

System.out.println("Sum = " + sum);
}
}

ถ้าจะหาค่า Average

package com.zengcode.demo;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.OptionalDouble;


public class StreamApiDemo {

public static void main(String[] args) {

List<Integer> numbers = new ArrayList<>(Arrays.asList(53, 12, 31, 24, 55, 86, 3, 13));

OptionalDouble average = numbers.stream()
.mapToInt(i -> i)
.average();

System.out.println("Average = " + average.getAsDouble());
}
}

ลอง Sort กันบ้าง

package com.zengcode.demo;

import java.util.ArrayList;
import java.util.Arrays;

public class StreamApiDemo {

public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(53, 12, 31, 24, 55, 86, 3, 13));
numbers
.stream()
.sorted()
.forEach(System.out::println);
}
}

จะได้ผลลัพท์

  • **** Sort & Reverse ทำแบบนี้ก็ได้นะ

Collections.sort(list);

Collections.reverse(list);

เอาแค่สามตัวแรก

package com.zengcode.demo;

import java.util.ArrayList;
import java.util.Arrays;

public class StreamApiDemo {

public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(53, 12, 31, 24, 55, 86, 3, 13));
numbers
.stream()
.sorted()
.limit(3)
.forEach(System.out::println);
}
}

เอาตัวที่ซ้ำออก

package com.zengcode.demo;

import java.util.ArrayList;
import java.util.Arrays;

public class StreamApiDemo {

public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(53, 12, 31, 12, 24, 55, 86, 3, 13, 12));
numbers
.stream()
.distinct()
.sorted()
.forEach(System.out::println);
}
}

ผลลัพธ์ที่ได้

โจทย์ : หาตัวเลขสามตัวแรกที่มากกว่า 15

package com.zengcode.demo;

import java.util.ArrayList;
import java.util.Arrays;

public class StreamApiDemo {

public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(53, 12, 31, 12, 24, 55, 86, 3, 13, 12));
numbers
.stream()
.distinct()
.sorted()
.filter(n -> n > 15)
.limit(3)
.forEach(System.out::println);
}
}

ผลลัพธ์

เอาตัวเลขคู่ใส่ใน List อีกตัวหนึ่ง

package com.zengcode.demo;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamApiDemo {

public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(53, 12, 31, 12, 24, 55, 86, 3, 13, 12));

List<Integer> oddNumber = numbers
.stream()
.distinct()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());

System.out.println(oddNumber.toString());

}
}

ซึ่งจะได้

แค่นี้ก่อนเนอะ ขี้เกียจละครับ

--

--

Chiwa Kantawong (Pea)
Chiwa Kantawong (Pea)

Written by Chiwa Kantawong (Pea)

Software Development Expert at Central Tech

No responses yet