一、lambda表达式处理stream操作

lambda表达式与stream的组合简化了集合数据处理的过程。

1.List转set

set集合的特点是去重

将List集合转换为set集合就是去除重复元素即可,这里就利用stream流。

复制代码
package secondday.homework;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
​
public class lambda {
    //list转为set集合
    public static void main(String args[]){
        List<Integer> list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(2);
        list.add(3);
​
        Set<Integer> set=list.stream().collect(Collectors.toSet());
        System.out.println(set);
    }
}

通过stream()方法创建流,再使用collect(Collectors.toSet())将流中的元素收集到Set中,set的特性会自动去掉重复元素

2.List转为Map

某个属性为键构建map,map是键值对的形式,key-value

复制代码
class Person{
    private String name;
    private int age;
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
​
    public String getName() {
        return name;
    }
​
    public int getAge() {
        return age;
    }
​
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class lambda {
    public static void main(String args[]){
        List<Person> personList=new ArrayList<>();
        personList.add(new Person("bai",22));
        personList.add(new Person("bob",23));
        //Person::getName是键   p->p是值 转换为map集合键值对的形式
        Map<String,Person> personMap=personList.stream().collect(Collectors.toMap(Person::getName,p->p));
        System.out.println(personMap);
    }
}

Collectors.toMap()的第一个参数是指定键的提取方式,第二个p->p表示值就是对象本身

3.Map转List

把map转为list,对键值对进行统一的处理,通过entry进行了统一的处理

复制代码
public class lambda {
    public static void main(String args[]){
        //map转为list集合
        Map<Integer,String> map=new HashMap<>();
        map.put(1,"bai");
        map.put(2,"xiao");
        map.put(3,"min");
        //将map的键值对放在了entry里面组成了一个
        List<Map.Entry<Integer,String>> list=map.entrySet().stream().collect(Collectors.toList());
        System.out.println(list);
    }
}

4.过滤

筛选符合条件组合

从List中筛选出偶数 此时我们会借助.filter方法:

复制代码
public class lambda {
    public static void main(String args[]){
    List<Integer> list=new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    List<Integer> list1=list.stream().filter(num->num%2==0).collect(Collectors.toList());
        System.out.println(list1);
    }
}

5.求和

对list进行求和,通过stream流进行求和

复制代码
public class lambda {
    public static void main(String args[]){
    List<Integer> list=new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    //mapToInt(Integer::intValue)将Integer转化为int形式然后再相加
    int num=list.stream().mapToInt(Integer::intValue).sum();
        System.out.println(num);
    }
}

6.分组

对Person对象按照年龄分组:流中的collect中的collectors中的groupingby

复制代码
class Person{
    private String name;
    private int age;
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
​
    public String getName() {
        return name;
    }
​
    public int getAge() {
        return age;
    }
​
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class lambda {
    public static void main(String args[]) {
        List<Person> list=new ArrayList<>();
        list.add(new Person("nihao",12));
        list.add(new Person("en",30));
        list.add(new Person("xiao",30));
        //分组是流里面的groupingBy然后里面是根据年龄分的组
        Map<Integer,List<Person>> map=list.stream().collect(Collectors.groupingBy(Person::getAge));
        System.out.println(map);
​
    }
}

7.map与reduce:元素转换与积累

map元素映射转换,将list中的元素转为大写 map

复制代码
public class lambda {
    public static void main(String args[]) {
        List<String> list=new ArrayList<>();
        list.add("hello");
        list.add("wo");
        //是采用map元素映射做的大小写的转换
        List<String> list1=list.stream().map(String::toUpperCase).collect(Collectors.toList());
        System.out.println(list1);
    }
}

8.reduce元素积累操作

reduce是将流中的元素组合成一个单个的值,并通过指定的二元操作符来不断地将元素进行合并和积累

其中reduce的返回类型是Optional,Optional是防止返回为空

复制代码
public class lambda {
    public static void main(String args[]) {
        List<Integer> list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        Optional<Integer> list1=list.stream().reduce((a, b)->a+b);
        System.out.println(list1);
    }
}

查找最大值和最小值

复制代码
public class lambda {
    public static void main(String args[]) {
        List<Integer> list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        Optional<Integer> list1=list.stream().reduce((a, b)->a>b?a:b);
        System.out.println(list1);
    }
}

连接所有的字符串

复制代码
public class lambda {
    public static void main(String args[]) {
        List<String> list=new ArrayList<>();
        list.add("h");
        list.add("e");
        list.add("l");
        list.add("l");
        Optional<String> list1=list.stream().reduce((a, b)->a+b);
        System.out.println(list1);
    }
}
相关推荐
CoderMeijun7 天前
C++ 多线程进阶:Lambda、条件变量与死锁
c++·多线程·条件变量·lambda·死锁·生产者消费者
七夜zippoe9 天前
DolphinDB自定义函数:打造专属工具库
自定义·lambda·函数·模块化·工具库·dolphindb
C雨后彩虹12 天前
Java Lambda & Stream 避坑指南:20个高频错误案例分析与修复
java·stream·lambda·并行流
TG_yunshuguoji13 天前
亚马逊云代理商:如何使用 CloudWatch 监控 AWS Lambda 函数日志?
云计算·aws·lambda·云服务器·cloudwatch
西西弗Sisyphus15 天前
Python Lambda 表达式等价普通函数实现
python·lambda
鬼先生_sir20 天前
SpringCloud-Stream + RocketMQ/Kafka
spring cloud·kafka·rocketmq·stream
stevenzqzq22 天前
Kotlin 语法深度拆解:从 Java 匿名内部类到极简 Lambda 完整演进
java·kotlin·lambda
大熊猫侯佩1 个月前
浣熊市生存手册:在 Xcode 预览中驯服“支离破碎”的 AI 流式数据
swiftui·stream·xcode 26·generable·foundationmodel·xcode previews·partially gener
苏渡苇1 个月前
Stream.collect() 的花式玩法:Collector.of() 自定义收集器
java·stream·jdk21·collector·jdk8+·自定义收集器
C雨后彩虹1 个月前
深入探索Java Stream:6个复杂业务场景下的高效实现方案
java·多线程·stream·同步·异步