java8--stream用法

java8新特性,stream流的用法,实现了对集合的一些特殊处理,处理的方式比较类似于sql的语法。

以下案例均为正确使用方法,仅供学习参考

import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamDemo {

    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        User user = new User();
        user.setId("1");
        user.setName("张一");
        userList.add(user);
        user = new User();
        user.setId("4");
        user.setName("张四");
        userList.add(user);
        user = new User();
        user.setId("2");
        user.setName("张二");
        userList.add(user);
        user = new User();
        user.setId("3");
        user.setName("张三");
        userList.add(user);
        user = new User();
        user.setId("5");
        user.setName("张二");
        userList.add(user);

        // 获取名称的集合 (stream 串行流)
//        List<String> collect = userList.stream().map(User::getName).collect(Collectors.toList());
//        System.out.println("获取名称的集合:" + collect);
//        //parallelStream() − 为集合创建并行流    并行流是多线程的结果,速度比stream快很多,可能会和stream结果不一致,但是效率很高
//        collect = userList.parallelStream().map(User::getName).collect(Collectors.toList());
//        System.out.println("获取名称的集合:" + collect);

        // 限制输出
//        List<String> collect = userList.stream().map(User::getName).limit(3).collect(Collectors.toList());
//        System.out.println("限制输出三个:" + collect);

        // 获取排序的集合
//        List<String> collect = userList.stream().map(User::getId).sorted().collect(Collectors.toList());
//        System.out.println("获取排序的集合:"+collect);
        // 多字段排序
List<DeviceTreeSortDto> newSortList = sortList.stream().sorted(
                        Comparator.comparing(DeviceTreeSortDto::getOldSortCode)
                                .thenComparing(DeviceTreeSortDto::getCategory, Comparator.reverseOrder()))
                .collect(Collectors.toList());

        // 获取去除重复的集合
//        List<String> collect = userList.stream().map(User::getName).distinct().collect(Collectors.toList());
//        System.out.println("获取去除重复的集合:"+collect);

        // 过滤
//        List<String> collect = userList.stream().map(User::getName).filter(str ->  str!=null && !str.isEmpty()).collect(Collectors.toList());
//        System.out.println("过滤:"+collect);

        // 获取集合装字符串
//        String mergedString = userList.stream().map(User::getName).filter(str -> str!=null && !str.isEmpty()).collect(Collectors.joining(", "));
//        System.out.println("直接获取字符串:"+mergedString);

        // 获取空字符串的数量
//        List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
//        long count = strings.stream().filter(str -> str!=null && !str.isEmpty()).count();
//        System.out.println("获取空字符串的数量:"+count);

        // 统计 (总数量,总和,最小值,最大值,平均值)
//        List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
//        IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
//        System.out.println("统计:"+stats);

        // 获取对应的平方数
//        List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
//        List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
//        System.out.println("去重获取平方:"+ JSON.toJSONString(squaresList));

        
        // 获取集合中,指定值的部分集合(获取总集合中,班级id为11的数据集合)
List<Detail> details = list.stream().filter(item -> StringUtils.equals('11', item.getClassId())).collect(Collectors.toList());

        // 对象集合,根据某一个属性进行去重
eduPeriodGrades = eduPeriodGrades.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(EduPeriodGrade :: getGrade))), ArrayList::new));
        
        // list对象数组,根据某一个属性转map
        Map<String, List<Dict>> map = dictList.stream()
				.collect(Collectors.groupingBy(Dict::getTypeCode));

        // list集合生成id到元素对象的Map集合
        Map<String, Student> id2StudentMap = studentList.stream().collect(Collectors.toMap(Student::getId, item -> item));

        // list集合生成id到指定对象属性的Map集合
        Map<String, String> id2NameMap = studentList.stream().collect(Collectors.toMap(Student::getId, Student::getName));

        // 快速截取最后10个元素(注:需要判断list.size()是否大于10)
        // skip是跳过指定个元素,跳过(list.size() - 10)个元素,则list只剩下最后10个元素
       List<M> list1 = list.stream()
                    .skip(list.size() - 10)
                    .collect(Collectors.toList());
        
    }
}

学海无涯苦作舟!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值