Java基础之Lambda与接口默认方法

Lambda表达式

Lambda表达式是Java SE 8中一个重要的新特性。本质上是一个“语法糖”,由编译器推断其含义,因此,可以使用更少的代码来实现同样的功能。

语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J.Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但更方便程序员的使用;只有CPU的微代码不是语法糖,其余代码包括机器语言都是语法糖。

Lambda语法

1、单语句语法:

(参数列表)->statement

举例说明:

(1)无参,返回100

        ()->100

(2)接收一个int型参数,并返回其5倍

       (int x)->x*5;或者:(x)->x*5;

(3)接收2个int型整数,并返回他们的和

      (int x,int  y)->x+y;或者:(x,y)->x+y;

(4)接收一个String型参数,并打印

      (String s)->System.out.println(s);或者:(s)->System.out.println(s);

2、遍历集合

集合对象.froEach(x->System.out.println(x));

或者:集合对象.forEach(System.out::println);

3、方法引用

实例对象::实力方法

类名称::静态方法

Stream API

Java8的Stream是对集合(Collection)对象功能的增强,可以对集合对象进行各种非常便利、高效的聚合操作。Stream API与Lambda表达式一起使用,可以提高编程效率。

转换Stream的常用方法

1、Stream中的map()使用一个给定的函数作用于原Stream中的每个元素,从而返回一个新的Stream。

举例:

list stream().map((x)->x + ".test").forEach(System.out::println);

2、Stream中的filter()对Stream中包含的元素使用给定的过滤函数进行过滤操作,新生成的Stream只包含符合条件的元素。

list.stream().filter(x->x.startsWith("张")).forEach(System.out::Println);

函数式接口Predicate

Predicate函数式接口的主要作用就是提供一个test方法,test方法接收一个参数,并返回一个布尔类型,Predicate在Stream API中进行一些判断的时候非常常用。

List<String> resultList = list.stream().filter(x->x.startWith("J")).collect(Collectors.toList())


Lambda单语句语法实例:

package statement;

public interface InterfaceA {
	public int methodA();
}
package statement;

public interface InterfaceB {
	public int methodB(int x,int y);
}
package statement;

public interface InterfaceC {
	public void metodC(String s);
}
package statement;

public class LambdaTest {

	public static void main(String[] args) {
		InterfaceA a = ()->250;
		System.out.println(a.methodA());
		
		InterfaceB b = (int x,int y)->x + y;
		System.out.println(b.methodB(55,66));
		
		InterfaceC c = (String s)->System.out.println("接收的信息内容是:" + s);
		c.metodC("Hello Java!");
	}

}

运行结果:


遍历集合实例:

package foreach;

import java.util.*;

public class ForeachDemo {

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		Collections.addAll(list,"apple","banana","peach","orange");
		System.out.println("第一种Lambda遍历:");
		list.forEach(x->System.out.println(x));
		
		System.out.println("第二种Lambda遍历:");
		list.forEach(System.out::println);
	}

}

运行结果:


Stream中的map()实例:

package stream;

import java.util.*;

public class MapDemo {

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		Collections.addAll(list,"red","yellow","blue","green","orange");
		list.stream().map((x)->x + ".jpg").forEachOrdered(System.out::println);

	}

}

运行结果:

Stream中的filter()实例:

package stream;

public class Student {
	private String name;
	private int age;
	private double score;

	public Student(String name, int age, double score) {
		super();
		this.name = name;
		this.age = age;
		this.score = score;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public double getScore() {
		return score;
	}

	public void setScore(double score) {
		this.score = score;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";
	}

}
package stream;

import java.util.*;

public class FilterDemo {

	public static void main(String[] args) {
		List<Student> list = new ArrayList<Student>();
		Collections.addAll(list,new Student("张三",20,66),new Student("李四",19,87),new Student("薛玉",22,78.5));
		list.stream().filter(x->{
				System.out.println("正在查看" + x.getName() + "是否符合要求...");
				return x.getScore() >= 77;
			}
		).forEach(System.out::println);;

	}

}

运行结果:


函数式接口Predicate实例:

package stream;

import java.util.function.Predicate;

public class PredicateDemo {

	public static void main(String[] args) {
		Predicate<String> pre = x->x.startsWith("o");
		System.out.println(pre.test("apple"));
		System.out.println(pre.test("orange"));

	}

}

运行结果:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值