JAVA8新特性stream的几点用法

JAVA 8新特性stream流

        Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
        Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
        Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
        这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
        元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
        这里主要介绍几种常用的方式

	public static class Person{
		private String name;
		private int age;
		public Person(String name, int age) {
			super();
			this.name=name;
			this.age=age;
		}
		public String getName(){
			return name;
		}
		public int getAge(){
			return age;
		}
	}

        1)筛选 :即从集合中筛选出来符合自己要求的数据集合。

public static void StreamFilter(){
		List<Person> list= new ArrayList<Person>();
		Person person1 = new Person("zhangsan",17);
		list.add(person1);
		Person person11 = new Person("zhangsan",18);
		list.add(person11);
		Person person2 = new Person("lisi",18);
		list.add(person2);
		Person person3 = new Person("wangwu",19);
		list.add(person3);
		//filter方法进行过滤筛选操作。这里可以进行条件组合
		List<Person> listPerson=list.stream().filter(s->s.name.equals("zhangsan"))
									.collect(Collectors.toList());
		for(Person parms : listPerson){
			System.out.println("姓名:"+parms.name+" 年龄:"+parms.age);
		}
	}

        2)排序 :根据特定条件进行排序。

//第一种  
List<Person> listPerson2=list.stream().sorted((p1, p2) -> p1.age - p2.age)
		           .collect(Collectors.toList());
//第二种   这里也可以对 Comparator的比较方法重写实现自己想要的效果
List<Person> listPerson21=list.stream().sorted(Comparator.comparingInt(Person::getAge))
		           .collect(Collectors.toList());
		       //两种都可以进行多条件组合

        3)截取 :返回前N个元素。

//这里返回前2个元素的集合
List<Person> listPerson3=list.stream().limit(2)
		           .collect(Collectors.toList());
		           

        4)去重 :根据条件去除重复元素。

//去除名字重复的元素
List<Person> listPerson4=list.stream().collect(
							Collectors.collectingAndThen(
									Collectors.toCollection(
											()->new TreeSet<>(
													Comparator.comparing(
															Person ->Person.getName()))),ArrayList::new));

测试源码

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;

public class StreamDemo1 {
	public static void main(String[] args) {
		StreamFilter();
		
	}
	
	public static void StreamFilter(){
		List<Person> list= new ArrayList<Person>();
		Person person1 = new Person("zhangsan",17);
		list.add(person1);
		Person person11 = new Person("zhangsan",18);
		list.add(person11);
		Person person2 = new Person("lisi",18);
		list.add(person2);
		Person person3 = new Person("wangwu",19);
		list.add(person3);
		//筛选
		List<Person> listPerson=list.stream().filter(s->s.name.equals("zhangsan")).collect(Collectors.toList());
		System.out.println("------筛选姓名为  zhangsan------");
		for(Person parms : listPerson){
			System.out.println("姓名:"+parms.name+" 年龄:"+parms.age);
		}
		//排序  这里也可以使用Comparator方法进行排序,重写Comparator可进行多条件组合排序
		System.out.println("------根据年龄排序------");
		List<Person> listPerson2=list.stream().sorted((p1, p2) -> p1.age - p2.age)
		           .collect(Collectors.toList());
//		List<Person> listPerson21=list.stream().sorted(Comparator.comparingInt(Person::getAge))
//		           .collect(Collectors.toList());
		for(Person parms : listPerson2){
			System.out.println("姓名:"+parms.name+" 年龄:"+parms.age);
		}
		//返回前N个元素
		System.out.println("------返回前2个元素------");
		List<Person> listPerson3=list.stream().limit(2)
		           .collect(Collectors.toList());
		for(Person parms : listPerson3){
			System.out.println("姓名:"+parms.name+" 年龄:"+parms.age);
		}
		//根据条件去除重复元素
		System.out.println("------去除名字重复的元素------");
		List<Person> listPerson4=list.stream().collect(
							Collectors.collectingAndThen(
									Collectors.toCollection(
											()->new TreeSet<>(
													Comparator.comparing(
															Person ->Person.getName()))),ArrayList::new));
		for(Person parms : listPerson4){
			System.out.println("姓名:"+parms.name+" 年龄:"+parms.age);
		}
	}
	
	
	public static class Person{
		private String name;
		private int age;
		public Person(String name, int age) {
			super();
			this.name=name;
			this.age=age;
		}
		public String getName(){
			return name;
		}
		public int getAge(){
			return age;
		}
	}
}

结果截图

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值