Java8新特性--Stream流式表达

Stream流式表达

1.Stream常用方法:
终结方法:返回值类型不再是Stream类型的方法,不再支持链式调用,其中主要包括count,forEach,reduce方法。
非终结方法:返回值类型仍然是Stream类型的方法,支持链式调用,除了终结方法count,forEach,reduce方法之外,其余方法均为非终结方法

2.Stream注意事项:
Stream的非终结方法执行返回的是新的流。
Stream如果不调用终结方法,每一次的非终结方法的执行都会将前一个流中的数据进行覆盖。

3.方法介绍:
forEach:遍历流中的数据

public static void main(String[] args) {
	Stream.of("aa","ac","bb","dd").forEach(System.out::println);
}

count:统计流中的数据个数

public static void main(String[] args) {
    Stream<String> stream = Stream.of("aa", "ac", "bb", "dd");
   	System.out.println(stream.count());
}

filter:过滤数据,返回符合条件的数据。可以通过该方法将一个流转换成另一个子集流。
该方法需要接收一个Predicate函数式接口参数作为筛选条件。

public static void main(String[] args) {
	Stream.of("aa","ac","bb","dd").filter(s -> 
	s.contains("a")).forEach(System.out::println);
}

limit:可以对流进行截取处理,只取前n个数据。参数是一个long类型的数值

public static void main(String[] args) {
    Stream.of("aa","ac","bb","dd").limit(3).forEach(System.out::println);
}

skip:可以跳过前面的几个数据,获取一个去掉前部分数据的流

public static void main(String[] args) {
    Stream.of("aa","ac","bb","dd").skip(3).forEach(System.out::println);
}

map:该方法需要一个Function函数式接口参数,可以将当前流中的T类型数据转换为另一
种R类型数据

public static void main(String[] args) {
	Stream.of("1","2","3","4","5","6","7").
	map(Integer::parseInt).forEach(System.out::println);
}

sort:将流中的数据进行排序

public static void main(String[] args) {
	Stream.of("1","2","3","4","5","1","6","7").
	map(Integer::parseInt).
    sorted((o1,o2)->o1-o2).forEach(System.out::println);
}

distinct:去除流中的重复数据。该方法对于基本数据类型是可以直接去重的,但是对于自
定义类型,需要重写hashCode和equals方法来移除重复元素

public static void main(String[] args) {
	Stream.of("1","2","3","4","5","1","6","7").
	map(Integer::parseInt).sorted((o1,o2)->o2-o1).distinct().
	forEach(System.out::println);
}

reduce:可以将流中的所有数据归纳得到一个数据

public static void main(String[] args) {
	//identify:赋给x的初始值   x:每一次循环的结果   y:接收流中的每一个数据
	System.out.println(Stream.of(4, 5, 9, 3).reduce(0, (x, y) -> x>y?x:y));
}

map与reduce的整合:求出所有人的年龄总和

public static void main(String[] args) {
 	Integer ageSum = Stream.of(
 	new Person("张三", 13),
    new Person("李四", 14),
    new Person("王五", 15),
    new Person("赵六", 16),
    new Person("刘七", 17)
  	).map(person -> person.getAge()).reduce(0,Integer::sum);
  	System.out.println(ageSum);
}

concat:该静态方法可以将两个流进行合并

public static void main(String[] args) {
	Stream stream1 = Stream.of("1", 1, "2", 2);
  	Stream stream2 = Arrays.asList("a", 3, "b", 4).stream();
  	Stream.concat(stream1, stream2).forEach(System.out::println);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值