Lambda

本文详细介绍了Lambda表达式的使用,包括带类型声明、无类型声明、带返回语句和无返回语句的形式,并展示了函数式接口如MathOperation和GreetingService的运用,以及Predicate和FlatMap在Java中的应用实例。
摘要由CSDN通过智能技术生成

 

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();
	}
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值