java stream流用法汇总

项目中大部分使用的是list,这里就以list为例

实体对象

public class QueryUserRspBo {
 /**
    * 用户id
    */
    private Long userId;
 
    /**
    * 用户名
    */
    private String userName;

filter

例如;过滤集合中姓名为“gu”的数据,得到的是过滤后的数据

List<QueryUserRspBo> collect = list.stream().filter(queryUserRspBo -> queryUserRspBo.getUserName() == "gu").collect(Collectors.toList());
        System.out.println("过滤名称为gu的数据集合="+ JSON.toJSONString(collect));

list.stream;将集合转换成流
collect;是个收集器,将过滤后的数据收集起来
Collectors.toList();将收集起来的数据转化成list

distinct

过滤掉集合中重复的元素,过滤的是所有元素都相同的对象

List<QueryUserRspBo> collect = list.stream().distinct().collect(Collectors.toList());
        System.out.println("去除重复数据后的集合="+JSON.toJSONString(collect))

sorted

对集合中元素进行排序,用来排序的元素类型必须是int才行

List<QueryUserRspBo> collect = list.stream()
         .sorted((queryUserRspBo1, queryUserRspBo2) -> queryUserRspBo1.getUserId() -             
          queryUserRspBo2.getUserId())
         .collect(Collectors.toList());

limit(long n)

返回前 n 个元素

 List<QueryUserRspBo> collect = list.stream().limit(2).collect(Collectors.toList());
        System.out.println("返回前两个元素="+JSON.toJSONString(collect));

anyMatch

集合中是否有一个元素值 为目标值,返回的是true或者false

 boolean b = list.stream().anyMatch(queryUserRspBo -> queryUserRspBo.getUserName().equals("cc"));
        if (b) {
            System.out.println("cc i love you!");
        }else {
            System.out.println("查无此人");
        }

.collect(Collectors.toMap())

将收集到的元素转换成map

 List<QueryUserRspBo> list = new ArrayList<>();
        list.add(new QueryUserRspBo(500L,"孙悟空"));
        list.add(new QueryUserRspBo(400L,"猪八戒"));
        list.add(new QueryUserRspBo(300L,"沙悟净"));
        list.add(new QueryUserRspBo(50L,"唐三藏"));
        Map<Object, Object> map = list.stream().collect(Collectors.toMap(p -> p.getUserName(), p -> p.getUserId(), (p1, p2) -> p1));
        System.out.println(map);

各参数的含义:
p -> p.getUserName();将对象的名称作为key
p -> p.getUserId();将对象的id作为value
(p1, p2) -> p1;如果对象1和对象2冲突,以对象1为标准

.collect(Collectors.joining())

将收集到的元素使用分隔符拼接起来

 List<QueryUserRspBo> list = new ArrayList<>();
        list.add(new QueryUserRspBo(500L,"孙悟空"));
        list.add(new QueryUserRspBo(400L,"猪八戒"));
        list.add(new QueryUserRspBo(300L,"沙悟净"));
        list.add(new QueryUserRspBo(50L,"唐三藏"));
        
        String collect = list.stream().map(p -> p.getUserName()).collect(Collectors.joining(","));
        System.out.println(collect);

.collect(Collectors.groupingBy(参数))

将收集到的元素按照一定条件分组

List<QueryUserRspBo> list = new ArrayList<>();
        list.add(new QueryUserRspBo(500L,"孙悟空","动物"));
        list.add(new QueryUserRspBo(400L,"猪八戒","动物"));
        list.add(new QueryUserRspBo(300L,"沙悟净","动物"));
        list.add(new QueryUserRspBo(50L,"唐三藏","人"));
 
        Map<String, List<QueryUserRspBo>> collect = list.stream().collect(Collectors.groupingBy(QueryUserRspBo::getType));
        System.out.println(collect);

使用示例

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class StreamExample {
    public static void main(String[] args) {
        List<String> items = Arrays.asList("apple", "banana", "orange", "kiwi", "melon", "mango");
 
        // 1. 过滤列表元素
        List<String> filteredItems = items.stream()
                .filter(item -> item.length() > 5)
                .collect(Collectors.toList());
        System.out.println(filteredItems); // 输出:[melon, mango]
 
        // 2. 转换列表元素
        List<String> transformedItems = items.stream()
                .map(String::toUpperCase)
                .collect(Collectors.toList());
        System.out.println(transformedItems); // 输出:[APPLE, BANANA, ORANGE, KIWI, MELON, MANGO]
 
        // 3. 查找列表中的元素
        String foundItem = items.stream()
                .filter(item -> item.startsWith("m"))
                .findFirst()
                .orElse(null);
        System.out.println(foundItem); // 输出:mango
 
        // 4. 计算列表元素的总和(例如字符串长度之和)
        int totalLength = items.stream()
                .mapToInt(String::length)
                .sum();
        System.out.println(totalLength); // 输出:32
 
        // 5. 分组列表元素
        List<List<String>> groupedItems = items.stream()
                .collect(Collectors.groupingBy(item -> item.charAt(0)))
                .values()
                .stream()
                .collect(Collectors.toList());
        System.out.println(groupedItems); // 输出:分组后的列表
 
        // 6. 排序列表元素
        List<String> sortedItems = items.stream()
                .sorted()
                .collect(Collectors.toList());
        System.out.println(sortedItems); // 输出:[apple, banana, kiwi, mango, melon, orange]
 
        // 7. 并行处理
        List<String> parallelProcessedItems = items.parallelStream()
                .map(String::toUpperCase)
                .collect(Collectors.toList());
        System.out.println(parallelProcessedItems); // 输出:转换后的列表(并行处理)
    }
}
posted @ 2024-06-20 16:09  hasome  阅读(8)  评论(0编辑  收藏  举报