【java】lambda表达式、Stream流

一、Lambda表达式

1、基本语法

lambda表达式可以理解为一段带有输入参数的可执行语句块,这种语法表达方式也可以成为函数式表达

(type1 param1, type1 param2,...) -> {
	// 方法执行的代码段;
}
package com.huawei.lambda表达式;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
// 练习参考 https://www.cnblogs.com/JunkingBoy/p/15050206.html
public class LambdaTest01 {
    public static void main(String[] args) {
        List<Student> students = Arrays.asList(new Student("张三", 18),
                new Student("李四", 25),
                new Student("王五", 37),
                new Student("赵四", 25));


        testLambda(students);

        // lamda表达式
        //students.forEach(student -> System.out.println(student));
        /*students.forEach(System.out::println);

        System.out.println("========排序后的结果=========");
        // 利用lambda表达式进行元素排序,按照年龄进行降序排列,年龄相同比较姓名
        Collections.sort(students, (x,y) -> {
            if (x.age == y.age) {
                return y.name.compareTo(x.name);
            }
            return y.age - x.age;
        });

        students.forEach(System.out::println);*/
    }
    static void testLambda(List<Student> students) {
        // 传统的方式
        System.out.println("====传统方式====");
        for (int i = 0; i < students.size(); i++) {
            System.out.println(students.get(i));
        }

        System.out.println("===lambda标准形式===");
        // lambda表达式: 2.1 参数类型可移省略
        students.forEach((student) -> {
            System.out.println(student);
        });

        System.out.println("===lambda简化形式1===");
        //2.2 当lambda表达式的参数个数只有一个时,可移省略大括号、语句结尾的分号。
        students.forEach(student -> System.out.println(student));

        System.out.println("===lambda简化形式2===");
        // 函数式表达
        students.forEach(System.out::println);
    }
}

class Student {
    String name;
    int age;

    Student() {
    }

    Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "name: " + name + ", age: " + age;
    }
}

2 lambda表达式的简化形式

2.1 参数类型可移省略

绝大多数情况下,编译器都可以从上下文环境中推断出lambda表达式的参数类型。因此,lambda表达式可移省略参数类型

3 lambda表达式的用途

package com.huawei.stream;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class StreamTest02 {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<Student>() {
            {
                // 匿名内部类添加对象 问题:此处怎么转换为lanbda表达式来创建对象list
                add(new Student("张三疯", 18));
                add(new Student("翠花", 22));
                add(new Student("李财", 5));
                add(new Student("李柏松", 28));
            }
        };
        // 测试:对students集合进行过滤,过滤条件时姓名字符串的长度大于3,接着按照姓名排序,再把集合中的studen信息打印出来
        students.stream()
                .filter(student -> student.getName().length() > 2)
                .sorted((s1, s2) -> s1.name.compareTo(s2.name))
                .limit(3)
                .forEach(System.out::println);

    }
}

class Student {
    String name;
    int age;

    Student() {
    }

    Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "name: " + name + ", age: " + age;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值