记JDK8中,Stream 使用

1、Stream

  • 流的来源: 可以是集合,数组,I/O channel, 产生器generator 等。
  • 聚合操作: 比如filter, map, reduce, find, match, sorted等。

2、Stream的使用

在 JDK8 中, 集合接口生成流:stream()【串行流】 parallelStream() 【并行流】

List<User> list = new ArrayList<User>();

List<User> users = list.stream()
					   .filter(p -> p.getUserId().equals("123"))
					   .limit(10)
					   .sorted()
					   .collect(Collectors.toList());

Stream
filter :用于通过设置的条件过滤出元素
limit : 用于获取指定数量的流
sorted : 用于对流进行排序
collect : 实现了很多归约操作,例如将流转换成集合和聚合元素
        Collectors.toList()
        Collectors.toMap()
        Collectors.toSet()


Stream 提供了 forEach 来迭代流中的每个数据

//打印所有数据
list.stream().forEach(System.out::println);

通过forEach,我们可以通过该方法来提取集合中泛型的某一个属性

List<User> list = new ArrayList();
List<String> str = new ArrayList<String>();

   list.stream().forEach(p->{
       str.add(p.getUserId());
   });

还有另外一种方式进行属性的提取

List<String> userIds =list.stream().map(u -> u.getUserId()).collect(Collectors.toList());List<String> userIds = list.stream().map(User::getUserId).collect(Collectors.toList());

进行求和、最大值、最小值、平均值

List<Integer> list = new ArrayList<Integer>();
IntSummaryStatistics collect = list.stream().collect(Collectors.summarizingInt(value -> value));
System.out.println(collect);
System.out.println("集合元素个数:" + collect.getCount());
System.out.println("总和:" + collect.getSum());
System.out.println("最小值:" + collect.getMax());
System.out.println("最大值:" + collect.getMin());
System.out.println("平均值:" + collect.getAverage());

List<Map<String,Object>>类型数据,想提取集合中某一key值的数据集合

List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();

Optional<Map<String, Object>> any = listMap.stream().findAny();
	//isPresent() 与 obj != null 一致,没有区别
	if(any.isPresent()){
		str.add(any.get().get("key").toString());
	}

Optional也是JDK8的新特性,是Java8为了解决null值判断问题,借鉴google guava类库的Optional类而引入的一个同名Optional类,避免导致空指针。
get()方法主要用于返回包装对象的实际值,但是如果包装对象值为null,会抛出NoSuchElementException异常。
isPresent()方法用于判断包装对象的值是否非空。


1、转JSONArray对象,collect(Collectors.toCollection(JSONArray::new));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值