【java高级】stream流的基本用法(一)

简介: 【java高级】stream流的基本用法(一)

Filter

public class FilterStreamDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
        setFilter(list);
    }
    public static void setFilter(List<String> list){
        list=list.stream().filter(e->e.equals("aa")).collect(Collectors.toList());// 过滤list中的元素等于aa的留下
        list.forEach(System.out::println);
    }
}

执行结果

分析

filter是将每个list中的元素做 集合.stream().filter(条件)的筛选,条件为true的留下,另外list筛选并没有修改list的元素,只是返回的符合筛选条件的元素.collect(Collectors.toList());就是将筛选的元素重新转换为list。

如何在jvm中实现sql的where条件的效果

public class FilterStreamDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
        String query="dd";
        String query1="aa";
        setFilter(list,query,query1);
    }
    public static void setFilter(List<String> list,String query,String query1){
        list=list.stream().filter(e -> query == null ? true : e.equals(query)).filter(e -> query1 == null ? true : e.equals(query1)).collect(Collectors.toList());
        list.forEach(System.out::println);
    }
}

分析:因为每个元素筛选时,如果为true就留下,所以当参数为null时,就全部为true,这样就自动取消这个条件了。

e -> query == null ? true : e.equals(query))

范例 :stream流模仿sql where条件+模糊查询

  projectSortList=projectList.stream()
                            .filter(e->query.getId()==null||isContaint(e.getId(),query.getId()))
                            .filter(e->query.getProjectName()==null||isContaint(e.getProjectName(),query.getProjectName()))
                            .filter(e->query.getProjectStatus()==null||query.getProjectStatus().equals(e.getProjectStatus()))
                            .filter(e->query.getBusinessId()==null||query.getBusinessId().equals(e.getBusinessId()))
                            .filter(e->query.getProjectType()==null||isContaint(e.getProjectType(),query.getProjectType()))
                            .filter(e->query.getBusinessName()==null||isContaint(e.getBusinessName(),query.getBusinessName()))
                            .filter(e->query.getCustomer()==null||query.getCustomer().equals(e.getCustomer()))
                            .filter(e->query.getCreateUser()==null||query.getCreateUser().equals(e.getCreateUser()))
                            .filter(e->query.getProjectManager()==null||query.getProjectManager().equals(e.getProjectManager()))
                            .collect(Collectors.toList());

 public Boolean isContaint(String e,String query){
        return e.contains(query);
    }   

Map

public class MapStreamDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");

        setUp(list);// 变大写字母
    }

    public static void setUp(List<String> list){
        list=list.stream().map(String::toUpperCase).collect(Collectors.toList());
        list.forEach(System.out::println);
    }
}

sorted

  public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("cc");
        list.add("dd");
        list.add("aa");
        list.add("bb");
        setSorted(list);
    }
    public static void setSorted(List<String> list){
        list=list.stream().sorted().collect(Collectors.toList());
        list.forEach(System.out::println);
    }

正序

projectList = projectList.stream().sorted(Comparator.comparing(Project::getCreateTime)).collect(Collectors.toList());

按照创建时间倒序排序

projectList = projectList.stream().sorted(Comparator.comparing(Project::getCreateTime).reversed()).collect(Collectors.toList());

如果有空字符串

正序 升序

 worktimes = worktimes.stream().sorted(Comparator.comparing(l -> l.getWorkDate(), Comparator.nullsFirst(Date::compareTo))).collect(Collectors.toList());

倒序 降序

  data = data.stream().sorted(Comparator.comparing(l -> l.getUserAccount(), Comparator.nullsFirst(String::compareTo).reversed())).collect(Collectors.toList());


目录
相关文章
|
4天前
|
Java
java8使用stream查找重复元素
java8使用stream查找重复元素
13 2
|
4天前
|
Java
java使用Stream流找出集合对象中最小值
java使用Stream流找出集合对象中最小值
9 1
|
5天前
|
Java
java同一个任务使用for循环与Stream比较
java同一个任务使用for循环与Stream比较
10 1
|
5天前
|
Java
Java多线程中notifyAll()方法用法总结
Java多线程中notifyAll()方法用法总结
|
5天前
|
Java
Java中Switch语句用法总结
Java中Switch语句用法总结
|
1天前
|
Java API 数据处理
Java中的lambda表达式与Stream API:高效的函数式编程
Java中的lambda表达式与Stream API:高效的函数式编程
|
2天前
|
存储 安全 Java
必知的技术知识:java8之stream
必知的技术知识:java8之stream
|
2天前
|
Java 关系型数据库 MySQL
Java反射的常见用法
Java反射的常见用法
|
3天前
|
Java BI Serverless
Java8 Stream深度解析:30个案例3万字助你精通集合筛选、归约、分组与聚合操作
Java8 Stream深度解析:30个案例3万字助你精通集合筛选、归约、分组与聚合操作
|
3天前
|
自然语言处理 Java
Java IO流进阶教程:掌握字节流和字符流的高级用法!
【6月更文挑战第26天】Java IO流助你高效交换数据,包括字节流(InputStream/OutputStream)和字符流(Reader/Writer)的高级技巧。缓冲流(Buffered*)提升读写性能,对象流(Object*Stream)支持对象序列化。字符流的BufferedReader/BufferedWriter优化文本处理,注意字符集如UTF-8用于编码转换。掌握这些,优化IO操作,提升代码质量。