java 8 lambda表达式 的相关使用(上)

以下关于lambda  表达式的使用实在java8的语法上进行的

使用Lambda表达式不仅让代码变的简单、而且可读、最重要的是代码量也随之减少很多,好了废话不多说,列举一些我在这个项目中使用的方式:

关于List的场景:

package mountain.entity;

import lombok.Data;

@Data
public class Student {
    int classId;

    String name;

    String phone;

    int age;

    public Student(int classId, String name, String phone, int age) {
        this.classId = classId;
        this.name = name;
        this.phone = phone;
        this.age = age;
    }
}
package mountain.lambda;

import mountain.entity.Student;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class ListLambda {
    public static void main(String[] args) {
        Student student1 = new Student(1, "tom1", "134***", 12);
        Student student2 = new Student(1, "tom2", "135***", 15);
        Student student3 = new Student(2, "tom3", "136***", 18);
        Student student4 = new Student(2, "tom4", "137***", 20);
        List<Student> list = new ArrayList<>();
        list.add(student1);
        list.add(student2);
        list.add(student3);
        list.add(student4);
        // 我们需要提取list中每个user的phone信息,并且把这些phone放到一个新的集合中
        List<String> phoneList = list.stream().map(s -> s.getPhone()).collect(Collectors.toList());
        phoneList.forEach(System.out::println);
        System.out.println("*************分割线*************");
        // 我们需要提取list中每个user的name信息,提取之后拼接成字符串,中间用逗号(,)分割开
        String collect = list.stream().map(s -> s.getName()).collect(Collectors.joining(","));
        System.out.println(collect);
        System.out.println("*************分割线*************");
        // 我们需要提取list中userId等于1的一个学生,并获取他的姓名
        Optional<Student> UserFirst = list.stream().filter(s -> 1 == s.getClassId()).findFirst();
        if (UserFirst.isPresent()) {
            System.out.println(UserFirst.get().getName());
        }
        System.out.println("*************分割线*************");
        // 我们需要提取list中学生年龄大于15岁的学生班级ID,并把这些班级ID放到一个字符串数组中
        String[] targetIds = list.stream()
                .filter(u -> u.getAge() > 15)
                .map(s -> String.valueOf(s.getClassId()))
                .toArray(String[]::new);
        for (String id : targetIds) {
            System.out.println(id);
        }
        System.out.println("*************分割线*************");
        // 我们需要提取list中年龄最大的学生的名字
        String maxAgeName = list.stream().max(Comparator.comparingInt(Student::getAge)).get().getName();
        System.out.println("maxAgeName:" + maxAgeName);
        System.out.println("*************分割线*************");
        // 先根据学生的年龄倒叙,再取前3的名字,中间用逗号隔开
        String topThreeName = list.stream().sorted(Comparator.comparingInt(Student::getAge)).limit(3).map(u -> u.getName()).collect(Collectors.joining(","));
        System.out.println("topThreeName:" + topThreeName);
        System.out.println("*************分割线*************");
        //统计年龄大于18岁的人数
        long ageCount = list.stream().filter(s -> s.getAge() > 18).count();
        //统计所有学生的年龄加起来有多大
        int ageSum = list.stream().mapToInt(s -> s.getAge()).sum();
        System.out.println("ageCount:" + ageCount);
        System.out.println("ageSum:" + ageSum);
    }

}

以上只是lambda针对list在java中的基本用法,本质只是起到一个抛砖引玉的作用,更多的相关功能还需要大家实践之后来慢慢分享,下次有时间给大家分享一下lambda关于map的相关用法,感觉有用的你可以点个赞!谢谢了

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值