jdk1.8 Stream常用操作

1、过滤

filter:过滤流中的某些元素

List<Integer> collect = Arrays.asList(1, 2, 3, 5, 5).stream().filter(integer -> integer > 2).collect(Collectors.toList());

2、去重

sorted():返回由此流的元素组成的流,根据自然顺序排序

List<Integer> collect1 = Arrays.asList(1, 1, 2, 2, 3, 4, 5).stream().distinct().collect(Collectors.toList());
或
Set<Integer> collect2 = Arrays.asList(1, 1, 2, 2, 3, 4, 5).stream().collect(Collectors.toSet());

3、排序

sorted():返回由此流的元素组成的流,根据自然顺序排序

// 数字升序
List<Integer> collect3 = Arrays.asList(3, 1, 1, 2, 4, 5).stream().sorted().collect(Collectors.toList());
// 数字倒序
List<Integer> collect4 = Arrays.asList(3, 1, 1, 2, 4, 5).stream().sorted((a, b) -> b - a).collect(Collectors.toList());

// 可以根据排序结果获取最值
 Integer integer = Arrays.asList(1, 1, 2, 2, 3, 4, 5).stream().sorted().findFirst().get();
 
 //按照大小(a-z)排序
 Arrays.asList("java","c#","python","scala").stream().sorted().forEach(System.out::println);
 //按照长度排序
 Arrays.asList("java","c#","python","scala").stream().sorted((a,b)->a.length()-b.length()).forEach(System.out::println);

4、截取

limit(n):返回由此流的元素组成的流,截短长度不能超过 skip(n):在丢弃流的第n元素后,配合limit(n)可实现分页

List<Integer> collect5 = Arrays.asList(1, 2, 3, 4, 5).stream().skip(1).limit(2).collect(Collectors.toList());
// 输出 2,3

5、转换

map:接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。flatMap:接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。

// 给每个元素+1
List<Integer> collect6 = Arrays.asList(1, 2, 3, 4, 5).stream().map(integer1 -> integer1 + 1).collect(Collectors.toList());

6、分组

List<PersonDo> list=new ArrayList<>();
	    list.add(new PersonDo("藏三",18,"男",167L,60L));
	    list.add(new PersonDo("李肆",18,"未知",180L,100L));
	list.add(new PersonDo("王武",19,"女",172L,55L));
// 根据年龄分组
  Map<Integer, List<PersonDO>> collect7 = list.stream().collect(Collectors.groupingBy(personDO -> personDO.getAge()));

分组可以用来统计聚合中元素重复个数,很方便

	//我们之前统计个数一般喜欢用map去统计
	 List<String> arr =  new ArrayList<>();
        arr.add("a");
        arr.add("a");
        arr.add("b");
        arr.add("b");
    list.forEach(s -> {
        Integer count = countMap.get(s);
        countMap.put(s, ObjectUtils.isEmpty(count) ? 1 : ++count);
    });
    // 现在用stream更方便
        List<String> arr =  new ArrayList<>();
        arr.add("a");
        arr.add("a");
        arr.add("b");
        arr.add("b");
        Map<String, Long> collect = arr.stream().collect(Collectors.groupingBy(s -> s, Collectors.counting()));

7、取值

开发中经常调用接口获取了一个对象列表,但是仅仅需要对象的其中的一两个元素

List<PersonDo> list=new ArrayList<>();
    list.add(new PersonDo("藏三",17,"男",167L,60L));
    list.add(new PersonDo("李肆",18,"未知",180L,100L));
list.add(new PersonDo("王武",19,"女",172L,55L));

// 取一个元素
List<String> nameList = list.stream().map(PersonDo::getName).collect(Collectors.toList());
// 取两个元素
Map<String, Integer> nameAndAgeList = list.stream().collect(Collectors.toMap(PersonDo::getName, PersonDo::getAge));

8、计算

  //求和
  String str ="11,22,33,44,55";
  System.out.println(Stream.of(str.split(",")).mapToInt(x -> Integer.valueOf(x)).sum());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值