Stream流的常用方法

目录

一、遍历

1.属性遍历

 2.对象遍历

3.遍历设值

二、过滤

1.简单过滤

 2.多条件过滤 

三、去重

四、统计

 五、截取

 六、跳过

 七、排序

1.普通排序

2.指定排序

八、最值

1.集合确定不为空

2.集合可能为空

九、统计

十、List结构转换Map结构

 1.map值是对象

2.map值是字段

十一、判断

1.anyMatch(只要有一个匹配则返回true)

2.allMatch(需要全部匹配条件则返回true)

3.noneMatch(需要全部不匹配条件则返回true)

​编辑

十二、转换

1.对象转成字段

2.对象转成对象

3.对象转成字符串

十三、分组

1.list结构分组成map结构(值是对象)

2.list结构分组成map结构(值是集合)

3.list结构分组成map结构(值是字段)

4.list结构分组成二级list结构


一、遍历

1.属性遍历

package com.saas.demo;

import java.util.ArrayList;
import java.util.List;
 
/**
 * Stream流遍历
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("小明");
        list.add("小红");
        list.add("小兰");
        list.stream().forEach(s -> System.out.println("value:"+s));
    }
}


 2.对象遍历

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
 
/**
 * Stream流遍历
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000")));
        peopleList.add(new People("小红",24,new BigDecimal("2800")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200")));
        //遍历对象
        peopleList.stream().forEach(s -> System.out.println("value:"+s));
        System.out.println("------------------------------------------------");
        //遍历属性
        peopleList.stream().forEach(s -> System.out.println("value:"+s.getName()));
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
}


3.遍历设值

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
 
/**
 * Stream设值
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000")));
        peopleList.add(new People("小红",24,new BigDecimal("2800")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200")));
        //遍历对象
        peopleList.stream().forEach(s -> System.out.println("value:"+s));
        System.out.println("------------------------------------------------");
        //统一更改年龄成25
        peopleList.stream().forEach(s -> s.setAge(25));
        //判断如果姓名叫小明的,则工资加100
        peopleList.stream().forEach(s ->{
            if("小明".equals(s.getName())){
                s.setSalary(s.getSalary().add(new BigDecimal("100")));
            }
        });
        //遍历对象
        peopleList.stream().forEach(s -> System.out.println("value:"+s));
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
}


二、过滤


1.简单过滤

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * Stream 过滤
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000")));
        peopleList.add(new People("小红",24,new BigDecimal("2800")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200")));
        //查找年龄大于等于23岁的人
        List<People> newPeopleList = peopleList.stream().filter(s ->s.getAge()>=23).collect(Collectors.toList());
        System.out.println("value:"+newPeopleList);
 
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
}

 2.多条件过滤 

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * Stream 过滤
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000")));
        peopleList.add(new People("小红",24,new BigDecimal("2800")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200")));
        //查找年龄大于等于23岁的人
        List<People> newPeopleList = peopleList.stream().filter(s ->s.getAge()>=23).collect(Collectors.toList());
        System.out.println("value:"+newPeopleList);
 
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
}
2.多条件过滤 


package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * Stream 多条件过滤
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000")));
        peopleList.add(new People("小红",24,new BigDecimal("2800")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200")));
        //查找年龄大于等于23岁并且工资不低于3000的人
        List<People> newPeopleList = peopleList.stream().filter(s ->{
            if(s.getAge()>=23 && s.getSalary().compareTo(new BigDecimal("3000"))>=0){
                return true;
            }
            return false;
        }).collect(Collectors.toList());
        System.out.println("value:"+newPeopleList);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
}


三、去重

package com.saas.demo;
 
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * Stream 去重
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("小明");
        list.add("小红");
        list.add("小兰");
        list.add("小红");
        list = list.stream().distinct().collect(Collectors.toList());
        System.out.println("value:"+list);
    }
}
 

四、统计

package com.saas.demo;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * Stream 统计
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("小明");
        list.add("小红");
        list.add("小兰");
        long count = list.stream().count();
        System.out.println("count:"+count);
    }
}


 
五、截取

package com.saas.demo;
 
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * Stream 截取
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("小明");
        list.add("小红");
        list.add("小兰");
        list = list.stream().limit(2).collect(Collectors.toList());
        System.out.println("value:"+list);
    }
}
 


 
六、跳过

package com.saas.demo;
 
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * Stream 跳过
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("小明");
        list.add("小红");
        list.add("小兰");
        //跳过前面两个
        list = list.stream().skip(2).collect(Collectors.toList());
        System.out.println("value:"+list);
    }
}
 


 
七、排序


1.普通排序

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * Stream 排序
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000")));
        peopleList.add(new People("小红",24,new BigDecimal("2800")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200")));
        //根据年龄从小到大排序
        peopleList =peopleList.stream()
                .sorted(Comparator.comparing(People::getAge))
                .collect(Collectors.toList());
        System.out.println("value:"+peopleList);
        System.out.println("------------------------------------------------");
        //根据年龄从大到小排序
        peopleList =peopleList.stream()
                .sorted(Comparator.comparing(People::getAge).reversed())
                .collect(Collectors.toList());
        System.out.println("value:"+peopleList);
 
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
}


2.指定排序

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Stream 排序
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000")));
        peopleList.add(new People("小红",24,new BigDecimal("2800")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200")));
        System.out.println("value:"+peopleList);
        System.out.println("------------------------------------------------");
        //根据名称指定排序
        List<String> nameList = Arrays.asList("小红","小明","小兰");
        peopleList = peopleList.stream().sorted(Comparator.comparing(People::getName,(x,y)->{
            for (String name : nameList) {
                if (name.equals(x) || name.equals(y)){
                    if (x.equals(y)){
                        return 0;
                    }else if (name.equals(x)){
                        return -1;
                    }else {
                        return 1;
                    }
                }
            }
            return 0;
        })).collect(Collectors.toList());
        System.out.println("value:"+peopleList);
        //根据年龄指定排序
        List<Integer> ageList = Arrays.asList(24,22,23);
        Collections.sort(peopleList, new Comparator<People>() {
            public int compare(People p1, People p2) {
                int x = ageList.indexOf(p1.getAge());
                int y = ageList.indexOf(p2.getAge());
                return x - y;
            }
        });
        System.out.println("value:"+peopleList);
 
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
}


八、最值


1.集合确定不为空

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
 
/**
 * Stream 获取最大值和最小值
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000")));
        peopleList.add(new People("小红",24,new BigDecimal("2800")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200")));
        //获取年龄最大的人
        People maxPeople =peopleList.stream().max(Comparator.comparing(People::getAge)).get();
        System.out.println("value:"+maxPeople);
        System.out.println("------------------------------------------------");
        //获取年龄最小的人
        People minPeople =peopleList.stream().min(Comparator.comparing(People::getAge)).get();
        System.out.println("value:"+minPeople);
 
 
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
}


2.集合可能为空

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
 
/**
 * Stream 获取最大值和最小值
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000")));
        peopleList.add(new People("小红",24,new BigDecimal("2800")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200")));
        //获取年龄最大的人
        Optional max =peopleList.stream().max(Comparator.comparing(People::getAge));
        if(max.isPresent()){
            System.out.println("value:"+max.get());
        }
        System.out.println("------------------------------------------------");
        //获取年龄最小的人
        Optional min =peopleList.stream().min(Comparator.comparing(People::getAge));
        if(min.isPresent()) {
            System.out.println("value:" + min.get());
        }
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
}


九、统计

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
 
/**
 * Stream 统计
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000"),new BigDecimal("1.1")));
        peopleList.add(new People("小红",24,new BigDecimal("2800"),new BigDecimal("1.2")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200"),new BigDecimal("1.3")));
        //统计年龄总和
        int totalAge =peopleList.stream().mapToInt(People::getAge).sum();
        System.out.println("value:"+totalAge);
        System.out.println("------------------------------------------------");
        //统计工资总和
        BigDecimal totalSalary = peopleList.stream()
                .map(People::getSalary)
                .reduce(BigDecimal.ZERO,BigDecimal::add);
        System.out.println("value:"+totalSalary);
        //统计工资乘以各自系数的总和(向上保留两位)
        BigDecimal totalRatioSalary = peopleList.stream()
                .map(s->s.getSalary().multiply(s.getRatio()).setScale(2,BigDecimal.ROUND_HALF_UP))
                .reduce(BigDecimal.ZERO,BigDecimal::add);
        System.out.println("value:"+totalRatioSalary);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
    //比率
    private BigDecimal ratio;
}


十、List结构转换Map结构


 1.map值是对象

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Stream list转map
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000"),new BigDecimal("1.1")));
        peopleList.add(new People("小红",24,new BigDecimal("2800"),new BigDecimal("1.2")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200"),new BigDecimal("1.3")));
        //根据姓名转map
        Map<String, People> map= peopleList.stream()
                .collect(Collectors.toMap(s-> s.getName(), object -> object,(oldValue, newValue) -> newValue));
        System.out.println("value:"+map);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
    //比率
    private BigDecimal ratio;
}


2.map值是字段

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Stream list转map
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000"),new BigDecimal("1.1")));
        peopleList.add(new People("小红",24,new BigDecimal("2800"),new BigDecimal("1.2")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200"),new BigDecimal("1.3")));
        //根据姓名转map
        Map<String, Integer> map = peopleList.stream().collect(Collectors.toMap(People::getName
                , People::getAge));
        System.out.println("value:"+map);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
    //比率
    private BigDecimal ratio;
}


十一、判断


1.anyMatch(只要有一个匹配则返回true)

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Stream 判断
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000"),new BigDecimal("1.1")));
        peopleList.add(new People("小红",24,new BigDecimal("2800"),new BigDecimal("1.2")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200"),new BigDecimal("1.3")));
        //判断集合里面是否超过23岁的人
        boolean flag= peopleList.stream().anyMatch(s -> s.getAge() > 23);
        System.out.println("value:"+flag);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
    //比率
    private BigDecimal ratio;
}


2.allMatch(需要全部匹配条件则返回true)

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Stream 判断
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000"),new BigDecimal("1.1")));
        peopleList.add(new People("小红",24,new BigDecimal("2800"),new BigDecimal("1.2")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200"),new BigDecimal("1.3")));
        //判断集合里面的人是否全部超过23岁
        boolean flag= peopleList.stream().allMatch(s -> s.getAge() > 23);
        System.out.println("value:"+flag);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
    //比率
    private BigDecimal ratio;
}


3.noneMatch(需要全部不匹配条件则返回true)


 

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Stream 判断
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000"),new BigDecimal("1.1")));
        peopleList.add(new People("小红",24,new BigDecimal("2800"),new BigDecimal("1.2")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200"),new BigDecimal("1.3")));
        //判断集合里面的人是否全部不超过23岁
        boolean flag= peopleList.stream().noneMatch(s -> s.getAge() > 23);
        System.out.println("value:"+flag);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
    //比率
    private BigDecimal ratio;
}


十二、转换


1.对象转成字段

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Stream 转换
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000"),new BigDecimal("1.1")));
        peopleList.add(new People("小红",24,new BigDecimal("2800"),new BigDecimal("1.2")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200"),new BigDecimal("1.3")));
        //获取姓名集合
        List<String> nameList = peopleList.stream().map(s-> s.getName()).collect(Collectors.toList());
        System.out.println("value:"+nameList);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
    //比率
    private BigDecimal ratio;
}


2.对象转成对象

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Stream 转换
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000"),new BigDecimal("1.1")));
        peopleList.add(new People("小红",24,new BigDecimal("2800"),new BigDecimal("1.2")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200"),new BigDecimal("1.3")));
        //对象转对象
        List<Student> studentList = peopleList.stream().map(s->{
            return new Student(s.getName(),s.getAge());
        }).collect(Collectors.toList());
        System.out.println("value:"+studentList);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
    //比率
    private BigDecimal ratio;
}
 
@Data
@AllArgsConstructor
class Student {
    //姓名
    private String name;
    //年龄
    private Integer age;
}


3.对象转成字符串

  

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Stream 转换
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3000"),new BigDecimal("1.1")));
        peopleList.add(new People("小红",24,new BigDecimal("2800"),new BigDecimal("1.2")));
        peopleList.add(new People("小兰",22,new BigDecimal("3200"),new BigDecimal("1.3")));
        //获取姓名字符串,逗号隔开
        String name = peopleList.stream().map(s-> s.getName()).collect(Collectors.joining(","));
        System.out.println("value:"+name);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
    //比率
    private BigDecimal ratio;
}


十三、分组


1.list结构分组成map结构(值是对象)

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
 
/**
 * Stream 分组
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明",23,new BigDecimal("3200"),new BigDecimal("1.1"),"开发"));
        peopleList.add(new People("小明",23,new BigDecimal("3100"),new BigDecimal("1.1"),"开发"));
        peopleList.add(new People("小明",23,new BigDecimal("3000"),new BigDecimal("1.1"),"开发"));
        peopleList.add(new People("小红",24,new BigDecimal("2800"),new BigDecimal("1.2"),"产品"));
        peopleList.add(new People("小兰",22,new BigDecimal("3200"),new BigDecimal("1.3"),"开发"));
        //根据名称分组(前提是名称是唯一的,要不然获取的是重复名称的最后一条)
        Map<String, People> studentMap = peopleList.stream().collect(Collectors.toMap(People::getName, Function.identity(), (key1, key2) -> key2));
        System.out.println("value:"+studentMap);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
    //比率
    private BigDecimal ratio;
    //职业
    private String occupation;
}


2.list结构分组成map结构(值是集合)

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Stream 分组
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明","开发"));
        peopleList.add(new People("小红","产品"));
        peopleList.add(new People("小兰","开发"));
        //根据职业分组无序
        Map<String, List<People>> studentMap = peopleList.stream().collect(Collectors.groupingBy(People::getOccupation));
        System.out.println("value:"+studentMap);
        //根据职业分组有序
        Map<String,List<People>> studentSortMap = peopleList.stream().collect(Collectors.groupingBy(People::getOccupation, LinkedHashMap::new,Collectors.toList()));
        System.out.println("value:"+studentSortMap);
 
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //职业
    private String occupation;
}


3.list结构分组成map结构(值是字段)


package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Stream 分组
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People(1,"小明",23,new BigDecimal("3000"),new BigDecimal("1.1"),"开发"));
        peopleList.add(new People(2,"小红",24,new BigDecimal("2800"),new BigDecimal("1.2"),"产品"));
        peopleList.add(new People(3,"小兰",22,new BigDecimal("3200"),new BigDecimal("1.3"),"开发"));
        //根据id分组
        Map<Integer, String> map = peopleList.stream().collect(Collectors.toMap(People::getId, People::getName,(oldValue, newValue) -> newValue));
        System.out.println("value:"+map);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //主键id
    private Integer id;
    //姓名
    private String name;
    //年龄
    private Integer age;
    //工资
    private BigDecimal salary;
    //比率
    private BigDecimal ratio;
    //职业
    private String occupation;
}


4.list结构分组成二级list结构

package com.saas.demo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Stream 分组
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<People> peopleList = new ArrayList<People>();
        peopleList.add(new People("小明","开发"));
        peopleList.add(new People("小红","产品"));
        peopleList.add(new People("小兰","开发"));
        //根据职业分组无序
        List<List<People>> newList = new ArrayList<>();
        peopleList.stream().collect(Collectors.groupingBy(People::getOccupation, Collectors.toList()))
                .forEach((occupation, listOccupation) -> {
                    newList.add(listOccupation);
                });
        System.out.println("value:"+newList);
        //根据职业分组有序
        List<List<People>> newSortList = new ArrayList<>();
        peopleList.stream().collect(Collectors.groupingBy(People::getOccupation, LinkedHashMap::new, Collectors.toList()))
                .forEach((occupation, listOccupation) -> {
                    newSortList.add(listOccupation);
                });
        System.out.println("value:"+newSortList);
    }
}
 
@Data
@AllArgsConstructor
class People {
    //姓名
    private String name;
    //职业
    private String occupation;
}

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Steam是一种用于数据处理的方法,可以从输入源逐个读取数据,并逐个处理它们,而不需要将所有数据加载到内存中。这种式处理的方法非常适用于处理大规模数据或者需要实时处理的场景。 在编程中,Steam可以用于处理文件、网络数据、数据库查询结果等。具体说说Steam()方法,我假设你是指Python编程语言中的Steam对象。 在Python中,Steam()是一个内置函数,用于创建一个可迭代的Steam对象。可迭代对象可以使用for循环进行遍历,逐个获取其中的元素。 以下是使用Steam()的示例代码: ```python # 创建一个Steam对象 my_list = [1, 2, 3, 4, 5] my_stream = iter(my_list) # 使用for循环遍历Steam对象 for item in my_stream: print(item) # 输出结果: # 1 # 2 # 3 # 4 # 5 ``` 在上述示例中,我们首先通过iter()函数将一个列表转换为Steam对象。然后使用for循环遍历Steam对象,逐个获取其中的元素并进行处理。 Steam对象还可以通过next()函数逐个获取元素,如下所示: ```python # 创建一个Steam对象 my_list = [1, 2, 3, 4, 5] my_stream = iter(my_list) # 使用next()函数获取Steam对象的下一个元素 print(next(my_stream)) # 输出:1 print(next(my_stream)) # 输出:2 print(next(my_stream)) # 输出:3 print(next(my_stream)) # 输出:4 print(next(my_stream)) # 输出:5 ``` 使用Steam对象的好处是可以逐个处理数据,而不需要一次性加载所有数据到内存中。这对于处理大规模数据或者需要实时处理的场景非常有用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值