[java8]Lambda表达式关于个人的一些总结.

java8中,接口可以声明default的 也可以声明static了.表示对于接口也可以有直接实现了(抽象类哭晕厕所,表示自己并无卵用了!)

带来的问题

1、子接口和子类优先

2、类比接口优先

3、如果在接口多重实现中遇到了冲突,必须指定调用哪个接口的default方法

lambda表达式在java8之中,把原本需要很多行代码才能实现的东西,改为一行!

不过也是需要有条件的,首先他必须是一个interface,其次 必须有注解@FunctionalInterface

然后! 只能有一个抽象的方法!defaultstatic的方法都可以>=0.

package ojama;

@FunctionalInterface
interface Logic {
	boolean logic(int s);
}

public class Test {
	public static void main(String[] args) {
		// 这里的x表示输入的参数 ->是固定的搭配, ->后面接返回值
		Logic logic = x -> 5 < x;
		System.out.println(logic.logic(10));
	}
}

如上,结果输出的的是true.

这里总结一下我认识的Lambda表达式

// 1. 不需要参数,返回值为 5  
() -> 5  
// 2. 干2件事
() ->{System.out.print(1);System.out.print(2)}  
// 3. 接收一个参数(数字类型),返回其2倍的值  
x -> 2 * x  
  
// 4. 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  
 

再讲解一个经典的栗子.


public class Test {
	public static void main(String[] args) {
		List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
		// 以前的方法
		for (Integer integer : list) {
			System.out.println(integer);
		}
		// 现在的方法
		list.forEach(integer -> System.out.println(integer));
	}
}

这样对比以前的foreach 代码会简洁很多  //这里可以理解成List接口需要一个参数 你把那个integer当参数穿进去 然后做一些爱做的事.

然后是线程的创建.


public class Test {
	public static void main(String[] args) {
		//以前启动线程的方式
		new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println(123456);
				System.out.println(456789);
			}
		}).start();
		//现在启动线程的方式
		new Thread(() -> {
			System.out.println(123456);
			System.out.println(456789);
		}).start();
	}
}

这里可以看到 Runnable的run方法是没有参数的.所以这个时候 我们写成了(),也就是 实现了@FunctionalInterface注解的接口,因为只有一个抽象方法的缘故,可以自己找他他要实现的方法.你也可以用此方法,将接口创建出来,代码也是如此简洁.

接下来我们看看另一个栗子.

如果我们想知道一个集合中,有多少个隔壁老王 我们应该怎么做呢?


public class Test {
	public static void main(String[] args) {
		List<Bp> list = new ArrayList<>();
		for (int i = 0; i < 100; i++) {
			if (i % 3 == 0) {
				list.add(new Bp(i, "隔壁老王"));
			} else {
				list.add(new Bp(i, "诚实老李"));
			}
		}
		list.stream().filter(bp -> {
			System.out.println("这里有一个隔壁老王");
			return bp.getName().equals("隔壁老王");
		}).count();
	}
}

这里帮我们过滤掉了隔壁老王.然后得到了所有的个数.

注意,Stream只是帮我们进行了处理过滤,如果你有在处理后给他运行代码,他连filter都不会执行,不信的话可以复制上面的代码,看看是否有输出.

如果我要获取一个集合的话 代码如下


public class Test {
	public static void main(String[] args) {
		List<Bp> list = new ArrayList<>();
		for (int i = 0; i < 100; i++) {
			if (i % 3 == 0) {
				list.add(new Bp(i, "隔壁老王"));
			} else {
				list.add(new Bp(i, "诚实老李"));
			}
		}
		List<Bp> collect = list.stream().filter(bp -> "隔壁老王".equals(bp.getName())).collect(Collectors.toList());
		collect.forEach(e -> System.out.println(e.getName()));
	}
}

//这里关于集合相关的操作太多了...如果需要还是看文档吧.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值