lambda表达式实用小实例

lambda表达式实用实例

java8新特性lambda的使用

//最基本的遍历方法
List<User> users = Lists.newArrayList();
        users.add(new User("1", "张三"));
        users.add(new User("2", "李四"));
	//一般遍历方式
	for (User user : users) {
     
            System.out.println(user.toString());
        }
    //采用lambda来遍历List集合
	users.forEach(System.out::println);

流的中间操作筛选和切片
//filter:过滤元素中的某些数据
//limit(n):获取第n个元素
// skip(n):跳过n元素,配合limit可实现分页
// distinct:通过流元素中的hashCode() 和 equals来去重

List streamMid = Arrays.asList(1, 2, 5, 5, 6, 7, 9);
        //筛选数值大于5的数据
        streamMid.stream().filter(c -> c > 5).collect(Collectors.toList());
        //获取前两个元素
        streamMid.stream().limit(2);
        //跳过前二个元素
        streamMid.stream().skip(2);
        //过滤小于10的元素,在去重,在跳过前两个元素,获取第2个元素
        streamMid.stream().filter(c -> c <        
        10).distinct().skip(2).limit(2);
        public static void main(String[] args) {
        List students = Lists.newArrayList();
        students.add(new Student("张三", 10));
        students.add(new Student("李四", 20));
        students.add(new Student("李四", 42));
        students.add(new Student("王五", 30));
      
        List mapList = Arrays.asList("a,b,c", "1,2,3");
        //去除当前list中的,和空格 转成一个新的元素 sout abc 123
        Stream stringStream = mapList.stream().map(s -> s.replace(",", ""));
        /**
         * 知识点 流的中间操作筛选和切片中filter过滤元素中的某些数据
         * 获取年龄为30岁并且第一个字是王的(startsWith获取开头的数据)
         */

        List collectName = students.stream().filter(c -> c.getAge() == 30 && c.getName().startsWith("王")).collect(Collectors.toList());
        System.out.println("-----------------获取年龄为30岁并且第一个字是王的"+collectName);
        /**
         * 知识点map,distinct
         * 根据名字去重
         */
        students.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
                () -> new TreeSet<>(Comparator.comparing(Student::getName))
        ), ArrayList::new)).forEach(System.out::println);

        /**
         * 知识点sorted
         * 根据年龄进行升序排列
         *流的中间操作排序(sort)
         */
        students.sort(Comparator.comparing(Student::getAge));
        System.out.println("-------------------------------------根据年龄进行升序排列"+students);
    }
        List students = Lists.newArrayList();
        students.add(new Student("aa", 10));
        students.add(new Student("bb", 20));
        students.add(new Student("aa", 30));
        students.add(new Student("dd", 40));
     //先根据姓名进行升序姓名相同年龄升序(thenComparing然后根据什么排序的意思)
	  students.sort(Comparator.comparing(Student::getName).thenComparing(Student::getAge)).;
	 //String类型是可以直接进行排序的 因为它本身就实现了Comparable接口
	 List strings = Arrays.asList("dd", "aa", "ff");
	  strings.stream().sorted();
 /**
         * 冒泡排序
         *      比较相邻元素,第一个大于第二个就进行交换
         *      一直到最后一个为最大数
         *      针对所有的元素执行以上操作,除了最后一个 故而用length-1
         *      第一次是对第n个数进行n-1 进行到最后一个n是最大的
         *      第二次是对第n-1个数进行n-2次比较,进行到最后一个第n-1次是最大的
         *       for (int i = 0; i < num.length - 1; i++) {
         *             for (int j = 0; j < num.length - 1 - i; j++) {
         *                 if (num[j] > num[j + 1]) {
         *                     int temp = num[j];
         *                     num[j] = num[j + 1];
         *                     num[j + 1] = temp;
         *                 }
         *             }
         *         }
         *                 Integer[] num = new Integer[]{1, 5, 8, 2, 9, 7};
         */
 List<User> users = Lists.newArrayList();
        users.add(new User("1", "张三"));
        users.add(new User("2", "李四"));
        users.add(new User("0", "王五"));

//过滤id为1的和名字为张三的User并转成List
 List<User> collect = users.stream().filter(c -> c.getId().equals("1")&&c.getName().equals("张三")).collect(Collectors.toList());

//过滤id为1的User并转成List
 List<User> collect = users.stream().filter(c -> c.getId().equals("1")).collect(Collectors.toList());

//对当前list进行去重
distinct.collect(Collectors.toList()).forEach(c->{
     
            System.out.println(c.toString());
});

Optional<User> first = users.stream().findFirst();//获取当前list中的第一个对象


for (Trader trader:traders) {
      };类似  traders.forEach(c->{
     System.out.println(); });

filter里面要跟一个boolean表达式
.var 有返回值的用这个都可以自动生成对象
获取演员名字为3个字的三个人 
 ArrayList<String> manArray = new ArrayList<>();
        manArray.add("刘德华");
        manArray.add("成龙");
        manArray.add("吴彦祖");
        manArray.add("周润发");
        manArray.add("周星驰");
        manArray.add("吴京");
 s.length就是当前这个字符串的长度==3  然后limit就是和sql的差不多

manArray.stream().filter(s -> s.length() == 3).limit(3).collect(Collectors.toList()).forEach(System.out::println);



 List<Trader> traders = Lists.newArrayList();
        traders.add(new Trader(1, "赵六", new Date()));
        traders.add(new Trader(2, "王五", new Date()));
        traders.add(new Trader(3, "李四", new Date()));
        traders.add(new Trader(4, "张三", new Date()));
        traders.add(new Trader(5, "张三", new Date()));

List<Integer> collect = traders.stream().map(Trader::getId).collect(Collectors.toList());
System.out.println("==============获取id列表");

traders.stream().filter(c -> c.getName().equals("张三")).forEach(System.out::println);
System.out.println("==============获取name=张三的 数据");

traders.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Trader::getName))), ArrayList::new)).forEach(System.out::println);
System.out.println("==============去除名字相同的数据");

traders.stream().filter(c -> c.getId() > 1).collect(Collectors.toList()).forEach(System.out::println);
System.out.println("==============获取id>1的数据,并转为集合");

待续。。

你可能感兴趣的:(java,后端,spring)