Lambada表达式
简化接口编程方式
是匿名内部类的简化书写方式
//把new Runnable()这个对象当做参数
Thread thread = new Thread(new Runnable(){
//重写run方法
public void run(){
sout(“匿名内部类写法”);
}
});
thread.star();
lambada表达式简化
把 ( ) -> { } 作为参数
Thread thread = new Thread(()->{
sout("lambada表达式写法");
});
thread.star();
进一步简化
new Thread(()->{sout("lambada表达式写法");}).star();
Stream流
干掉for循环和迭代器遍历
数据源、数据处理、收集结果
//Stream流
//1.数据源(在集合中筛选出年龄大于21,切薪资大于2000的人)
Predicate<User> pre1= user -> user.getAge() < 21;
Predicate<User> pre2= user -> user.getSalary() > 2000;
List<User> collect = list.stream()
.filter(pre1)//过滤条件1
.filter(pre2)
.collect(Collectors.toList());//将收集到的数据放入新的集合
System.out.println(collect);
也可以简化为
List<User> collect = list.stream()
.filter(user.getAge() < 21)//过滤条件1
.filter(user.getSalary() > 2000)
.collect(Collectors.toList());//将收集到的数据放入新的集合
System.out.println(collect);
或者
Predicate<User> pre1= user -> user.getAge() < 21
Predicate<User> pre2= user -> user.getSalary() > 2000
List<User> collect = list.stream()
.filter(pre1.and(pre2)) //如果是或关系,可以吧and改为or
.collect(Collectors.toList());//将收集到的数据放入新的集合
System.out.println(collect);
filter筛选
filter得到的结果是一个集合
List<String> list = Arrays.asList("hello","world","java");
list.stream()
.filter( str -> str.length()>=5 ) //将长度大于,等于5的字符串过滤,放进str集合,并遍历
.forEach(str -> sout(str));
lilimit截取
// 截取list集合的前两个字符串,放进str集合遍历输出
list.stream()
.limit(2)
.forEach(str -> sout(str));
sorted排序
List<Integer> list = Array.asList(1,5,4,8,3,2);
list.stream()
.sorted() //默认升序排列,在sorted(Comparator)表示降序排序。
.forEach( num -> sout(num) );
最大值、最小值、长度
List<Integer> list = Array.asList(1,5,4,8,3,2);
//最大
sout(list.stream()
.max(Integer :: compareTo).get());
//最小
sout(list.stream()
.min(Integer :: compareTo).get());
//长度
sout(list.stream().count());
map对集合执行特定操作后,作为对象输出
List<Integer> list = Array.asList(1,5,4,8,3,2);
list.stream()
.map( num -> num+10 );
.forEach( num -> sout(num) ); //得到结果:11,15,14,18,13,12
reduce
对传入的元素进行指定操作后作为对象输出
区别于map输出多个值,reduce只输出一个
//表示累加,两集合里的所有值累加
List<Integer> list = Array.asList(1,5,4,8,3,2);
sout(
list.stream()
.reduce( (sum,num )-> sum+num).get()
);
collectors
基于目标集合生成新的集合
//收集当前集合中的所有偶数,并输出偶数集合
List<Integer> list = Array.asList(1,5,4,8,3,2);
sout(
list.stream()
.filter( num -> num%2==0 )
.collect( Collectors.toList() );
);