JAVA8之lambda表达式

本文介绍 Java 8 中 Lambda 表达式的使用方法及其如何简化代码。通过具体示例展示如何利用 Lambda 表达式实现函数参数化,并介绍了 Java 8 提供的一系列默认函数式接口,如 Predicate、Consumer 和 Function 等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:lambda环绕执行模式

也许你们像我一样,目前对lambda表达式只是浅显的认为是,匿名内部类的简写形式,有点仅仅是看着好看点,可读性更强一点.

其实不然,lambda表达式是java8中函数参数化的一种重要体现.

让我们看下面一个小小的例子:

	public static String getChar(){
		List<String> list=new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		return list.remove(0);
}

这是移除并获取数据集第一个资源的代码.如果我想获取前两个呢?或者第一个第三个呢?

我们需要不停地根据需求更改这段代码.怎么样才能一劳永逸呢?想下函数参数化

其实很简单,函数参数化的做法就是我们给一个接口定义一个方法簇(一个接口内方法名唯一的方法)这个方法簇的参数是你需要处理的内容,比如例子里的list数据集

public interface ListProcess {
	String  process(List<String> list);
}

这样我们只需要对原先的方法进行一次简单的修改即可,注意高亮部分

	public static String getChar(ListProcess l){
		List<String> list=new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		return l.process(list)
}
接下来进行我们想要的操作即可

String char1 = getChar((List<String> list)->list.remove(0)+list.remove(0));

二.默认函数式接口
  .predicate参数<T>  返回值boolean

例子:

	public static void main(String[] args) {
		List<String> list = Arrays.asList("abc","bbc","cbd","a","ab");
		List filter = filter(list, (String str)->str.length()>2);
		System.out.println(filter);
	}
	//predicate
	public static List filter(List<String> list, Predicate<String> p){
		List<String> result=new ArrayList<String>();
		for (String l : list) {
			if(p.test(l)){
				result.add(l);
			}
		}
		return result;
	}


.consumer参数<T> 返回值void:

例子:

public static void main(String[] args) {
		List<String> list = Arrays.asList("abc","bbc","cbd","a","ab");
		print(list, (str)->System.out.println(str));
	}
	//consumer
	public static void print(List<String> list, Consumer c){
		for (String s : list) {
			c.accept(s);
		}
	}


.function参数<T> 返回值<R>

例子:

public static void main(String[] args) {
		List<String> list = Arrays.asList("abc","bbc","cbd","a","ab");
		List doIt = doIt(list, (String str)->str+"hehe");
		System.out.println(doIt);
	}
	//function
	public static List doIt(List<String> list, Function<String,String> f){
		List<String> result=new ArrayList<String>();
		for (String s : list) {
			result.add(f.apply(s));
		}
		return result;
	}
从lambda表达式你可以感觉到java8的设计者为了性能问题委实煞费苦心,大家都知道基本类型和它自己的包装类自己可以进行自动的封箱拆箱,但是这是需要消耗性能的

而设计者为我们提供了一系列,默认的函数式接口

函数式接口

函数描述符

原始类型特化

Predicate<T>

T->Boolean

IntPredicate,LongPredicate,DoublePredicate

Consumer<T>

T->void

IntConsumer,DoubleConsumer,LongConsumer

Function<T,R>

T->R

IntFunction<R>,IntToDoubleFunction,IntToLongFuntion
LongFunction<R>,LongToIntFunction,LongToDoubleFuntion
DoubleFunction<R>,DoubleToIntFunction,DoubleToLongFunction

Supplier<T>

()->T

BooleanFUpplier,IntSupplier,LongSupplier,DoubleSupplier

UnaryOperator<T>

T->T

IntUnaryOperator,DoubleUnaryOperator,LongUnaryOperator

BinaryOperator<T>

(T,T)->T

IntBinaryOperator,LongBinaryOperator,DoubleBinaryOperator

BiPredicate<L,R>

(L,R)->boolean

 

BiConsumer<T,U>

(T,U)->void

ObjIntConsumer<T>,ObjLongConsumer<T>,ObjDoubleConsumer<T>

BiFuntion<T,U,R>

(T,U)->R

ToIntBiFunction<T,U>,ToLongBiFunction<T,U>,ToDoubleBiFunction<T,U>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值