1. Lambda表达式
// Lambda 测试
package com.company;
public class Main {
public static void main(String[] args) {
Main test = new Main();
// 带有类型声明的表达式
MathOperation addition = (int a, int b) -> a + b;
// 没有类型声明的表达式
MathOperation subtraction = (a, b) -> a - b;
// 带有大括号、带有返回语句的表达式
MathOperation multiplication = (int a, int b) -> { return a + b; };
// 没有大括号和return语句的表达式
MathOperation division = (int a, int b) -> a / b;
System.out.println("10 + 5 = " + test.operate(10, 5, addition));
System.out.println("10 - 5 = " + test.operate(10, 5, subtraction));
System.out.println("10 × 5 = " + test.operate(10, 5, multiplication));
System.out.println("10 / 5 = " + test.operate(10, 5, division));
// 没有括号的表达式
GreetingService greetingService1 = message ->
System.out.println("hello " + message);
// 有括号的表达式
GreetingService greetingService2 = (message)->
System.out.println("hello " + message);
greetingService1.sayMessage("world");
greetingService2.sayMessage("shitt world");
}
interface MathOperation {
int operation(int a, int b);
}
interface GreetingService {
void sayMessage(String message);
}
private int operate(int a, int b, MathOperation mathOperation) {
return mathOperation.operation(a, b);
}
}
2. 函数式接口
// 函数式接口测试
package com.company;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
System.out.println("All of the numbers: ");
eval(list, n -> true);
System.out.println("Even numbers: ");
eval(list, n -> n % 2 == 0);
System.out.println("Numbers that greater than 5: ");
eval(list, n -> n > 5);
}
public static void eval(List<Integer> list, Predicate<Integer> predicate) {
for (Integer n : list) {
if(predicate.test(n)) {
System.out.print(n + " ");
}
}
System.out.println();
}
}
3. Predicate
// Predicate 测试
package com.company;
import java.util.Random;
import java.util.function.IntPredicate;
import java.util.function.Predicate;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
Predicate<Integer> predicate = a -> a > 50;
System.out.println(predicate.test(52));
IntPredicate intPredicate = a -> a > 50;
IntStream.of(10, 11, 44, 59, 46, 55, 99, 88, 50)
.filter(intPredicate).peek(System.out::println).count();
}
}
4. FlatMap
import java.util.Arrays;
import java.util.stream.Stream;
public class FlatMapTest {
public static void main(String[] args) {
Stream<String> stringStream1 = Stream.of("shi yan", "shi yan lou", "lou yan shi");
Stream<String> stringStream2 = Stream.of("shi yan", "shi yan lou", "lou yan shi");
Stream<String[]> mapStream = stringStream1.map(v -> v.split(" "));
Stream<String> flatMapStream = stringStream2.flatMap(v -> Arrays.stream(v.split(" ")));
System.out.println("mapStream 打印:");
mapStream.peek(System.out::println).count();
System.out.println("flatMapStream 打印:");
flatMapStream.peek(System.out::println).count();
}
}