Java 8 Streams API [Part 2]
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());
}
}
ซึ่งจะได้
แค่นี้ก่อนเนอะ ขี้เกียจละครับ