java8中stream流_java8新特性-Stream流的使用

最近处理业务时用到了Stream流的,记录一下:

比较适合从一个对象集合中取对象中某个满足条件的属性

例:

resolveEntities是一个对象集合,其中有afpodProjn属性

resolveEntities.stream().filter(m -> StringUtil.isNotEmpty(m.getAfpodProjn())).filter(m -> m.getAfpodProjn().contains("123")).forEach(s -> selectResolveEntityList.add(s));

Stream流的使用

1.生成流:

通过数据源生成流,如集合,数组等

list.stream()

2.中间操作:

filter(): 进行过滤操作 返回一个新的流交给下个操作使用

limit(long maxSize):返回流中数据,截取前多少个数据

skip(long n):跳过指定参数的个数,返回剩余的数据

concat(流1,,流2):合并两个流

distinct():返回该流中由不同元素组成的流 (去重)

sorted():排序,自然排序,也可根据参数中的comparator来排序

map(函数):返回满足该函数的结果流,会转换生成新的元素,如下由开始的Person对象转为了String类型的Name属性来进行操作

List personList = Lists.newArrayList();

personList.add(new Person("123"));

personList.add(new Person("张飒"));

personList.stream().map(p-> p.getName()).forEach(s -> System.out.println(s));

3.终结操作:

foreach():当这个操作执行,流被使用完毕

count():返回流中的元素数

4.收集操作:

Stream流的收集方法: R collect​(Collector collector)

它是通过工具类Collectors提供了具体的收集方式

public static Collector toList​():把元素收集到List集合中

public static Collector toSet​():把元素收集到Set集合中

public static Collector toMap​(Function keyMapper,Function valueMapper):把元素收集到Map集合中

代码示例:

//创建List集合对象

List list = new ArrayList();

list.add("张三丰");

list.add("李二郎");

list.add("王八蛋");

list.add("二笔");

//需求1:得到名字为3个字的流

Stream listStream = list.stream().filter(s -> s.length() == 3);

//需求2:把使用Stream流操作完毕的数据收集到List集合中并遍历

List names = listStream.collect(Collectors.toList());

for(String name : names) {

System.out.println(name);

}

//创建Set集合对象

Set set = new HashSet();

set.add(10);

set.add(20);

set.add(30);

set.add(33);

set.add(35);

//需求3:得到年龄大于25的流

Stream setStream = set.stream().filter(age -> age > 25);

//需求4:把使用Stream流操作完毕的数据收集到Set集合中并遍历

Set ages = setStream.collect(Collectors.toSet());

for(Integer age : ages) {

System.out.println(age);

}

//定义一个字符串数组,每一个字符串数据由姓名数据和年龄数据组合而成

String[] strArray = {"林青霞,30", "张曼玉,35", "王祖贤,33", "柳岩,25"};

//需求5:得到字符串中年龄数据大于28的流

Stream arrayStream = Stream.of(strArray).filter(s -> Integer.parseInt(s.split(",")[1]) > 28);

//需求6:把使用Stream流操作完毕的数据收集到Map集合中并遍历,字符串中的姓名作键,年龄作值

Map map = arrayStream.collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));

Set keySet = map.keySet();

for (String key : keySet) {

Integer value = map.get(key);

System.out.println(key + "," + value);

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值