• java8新特性-Stream操作集合中的数据


    1.类型转换

    (1)其他类型转换成Stream对象

    public class App {
        public static void main(String[] args) {
            //1.批量数据 --> Stream对象
            //多个数据
            Stream stream1 = Stream.of("admin", "tom", "mike");
            //数组
            String[] array = new String[]{"xuexi", "biyao"};
            Stream stream2 = Arrays.stream(array);
            //列表
            List<String> list = new ArrayList<>();
            list.add("wudang");
            list.add("emei");
            list.add("mingjiao");
            Stream stream3 = list.stream();
            //集合
            Set<String> set = new HashSet<>();
            set.add("shaolin");
            set.add("kongtong");
            Stream stream4 = set.stream();
            //map
            Map<String, Object> map = new HashMap<>();
            map.put("张三", 11);
            map.put("李四", 15);
            map.put("王五", 16);
            Stream stream5 = map.entrySet().stream();
    
            //2.Stream对象对于基本数据类型的功能封装
            // int/long/double
            IntStream.of(new int[]{10, 20, 30}).forEach(System.out::println);
            IntStream.range(1, 5).forEach(System.out::println);
            IntStream.rangeClosed(1, 5).forEach(System.out::println);
        }
    }

    (2)Stream对象转换成其他对象

    //3.Stream转换成指定数据对象
    //数组
    Object[] object = stream1.toArray(String[]::new);
    //字符串
    String s = stream2.collect(Collectors.joining()).toString();
    System.out.println(s);
    //列表
    List<String> strings = (List<String>) stream3.collect(Collectors.toList());
    System.out.println(strings);
    //集合
    Set<String> set1 = (Set<String>) stream4.collect(Collectors.toSet());
    System.out.println(set1);
    //map
    Map<String, String> map1 = (Map<String, String>) stream5.collect(Collectors.toMap(x -> x, y -> y));
    System.out.println(map1);

    2.Stream对象常见API操作

            //4.Stream中常见的API操作
            List<String> accountList = new ArrayList<>();
            accountList.add("songjiang");
            accountList.add("wuyong");
            accountList.add("lujunyi");
            accountList.add("linchong");
            //map()中间操作,map()方法接收一个Function接口
            accountList = accountList.stream().map(x -> "梁山好汉:" + x).collect(Collectors.toList());
            //添加过滤条件,过滤符合条件的用户 filter()
            accountList = accountList.stream().filter(x -> x.length() > 7).collect(Collectors.toList());
            // forEach 增强型循环
            accountList.forEach(x -> System.out.println("forEach:" + x));
            // peek() 迭代数据完成数据的依次处理过程
            accountList.stream().peek(x -> System.out.println("peek 1:" + x))
                    .peek(x -> System.out.println("peek 2 :" + x)).forEach(System.out::println);
            accountList.forEach(System.out::println);
            //Stream中对于数字的操作
            List<Integer> intList = new ArrayList<>();
            intList.add(20);
            intList.add(14);
            intList.add(11);
            intList.add(12);
            intList.add(10);
            intList.add(18);
            intList.add(19);
            intList.add(12);
            //skip()中间操作,有状态,跳过部分数据
            intList.stream().skip(3).forEach(System.out::println);
            //limit()限制输出的数量
            intList.stream().skip(3).limit(3).forEach(System.out::println);
            System.out.println("-------------------分割线-----------------------");
            //distinct() 中间操作,有状态,剔除重复数据
            intList.stream().distinct().forEach(System.out::println);
            System.out.println("-------------------分割线-----------------------");
            //sorted() 中间操作,有状态,排序
    
            //max() 获取最大操作
            //min() 获取最小值
            //reduce() 合并处理数据
            Optional optional = intList.stream().max((x, y) -> x - y);
            System.out.println(optional.get());
    
            Optional optional1 = intList.stream().reduce((sum, x) -> sum + x);
            System.out.println(optional1.get());
    

      

  • 相关阅读:
    【知识总结】Burnside 引理和 Polya 定理
    【洛谷1973】[NOI2011]NOI嘉年华(动态规划)
    【洛谷4705】玩游戏(多项式)
    【洛谷5366】[SNOI2017] 遗失的答案(状压DP)
    【Codeforces235D_CF235D】Graph Game(概率_基环树)
    【Codeforces553E_CF553E】Kyoya and Train(概率_CDQ分治_FFT)
    【知识总结】博弈论入门
    Saltstack
    Tomcat 的 catalina.out 日志分割
    eclipse的工程里的*.properties文件默认以unicode的编码形式显示
  • 原文地址:https://www.cnblogs.com/freeht/p/13070360.html
Copyright © 2020-2023  润新知