【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());


目录
相关文章
|
12天前
|
Java API 数据处理
探索Java中的Lambda表达式与Stream API
【10月更文挑战第22天】 在Java编程中,Lambda表达式和Stream API是两个强大的功能,它们极大地简化了代码的编写和提高了开发效率。本文将深入探讨这两个概念的基本用法、优势以及在实际项目中的应用案例,帮助读者更好地理解和运用这些现代Java特性。
|
1月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
35 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
1月前
|
Java Shell 流计算
Flink-02 Flink Java 3分钟上手 Stream SingleOutputStreamOpe ExecutionEnvironment DataSet FlatMapFunction
Flink-02 Flink Java 3分钟上手 Stream SingleOutputStreamOpe ExecutionEnvironment DataSet FlatMapFunction
21 1
Flink-02 Flink Java 3分钟上手 Stream SingleOutputStreamOpe ExecutionEnvironment DataSet FlatMapFunction
|
16天前
|
存储 安全 Java
深入理解Java中的FutureTask:用法和原理
【10月更文挑战第28天】`FutureTask` 是 Java 中 `java.util.concurrent` 包下的一个类,实现了 `RunnableFuture` 接口,支持异步计算和结果获取。它可以作为 `Runnable` 被线程执行,同时通过 `Future` 接口获取计算结果。`FutureTask` 可以基于 `Callable` 或 `Runnable` 创建,常用于多线程环境中执行耗时任务,避免阻塞主线程。任务结果可通过 `get` 方法获取,支持阻塞和非阻塞方式。内部使用 AQS 实现同步机制,确保线程安全。
|
2月前
|
存储 Java API
Java——Stream流详解
Stream流是JDK 8引入的概念,用于高效处理集合或数组数据。其API支持声明式编程,操作分为中间操作和终端操作。中间操作包括过滤、映射、排序等,可链式调用;终端操作则完成数据处理,如遍历、收集等。Stream流简化了集合与数组的操作,提升了代码的简洁性
70 11
Java——Stream流详解
|
1月前
|
存储 Java 数据处理
Flink-01 介绍Flink Java 3分钟上手 HelloWorld 和 Stream ExecutionEnvironment DataSet FlatMapFunction
Flink-01 介绍Flink Java 3分钟上手 HelloWorld 和 Stream ExecutionEnvironment DataSet FlatMapFunction
29 1
|
2月前
|
Java API C++
Java 8 Stream Api 中的 peek 操作
本文介绍了Java中`Stream`的`peek`操作,该操作通过`Consumer&lt;T&gt;`函数消费流中的每个元素,但不改变元素类型。文章详细解释了`Consumer&lt;T&gt;`接口及其使用场景,并通过示例代码展示了`peek`操作的应用。此外,还对比了`peek`与`map`的区别,帮助读者更好地理解这两种操作的不同用途。作者为码农小胖哥,原文发布于稀土掘金。
108 9
Java 8 Stream Api 中的 peek 操作
|
2月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
2月前
|
Java
Java 正则表达式高级用法
Java 中的正则表达式是强大的文本处理工具,用于搜索、匹配、替换和分割字符串。`java.util.regex` 包提供了 `Pattern` 和 `Matcher` 类来高效处理正则表达式。本文介绍了高级用法,包括使用 `Pattern` 和 `Matcher` 进行匹配、断言(如正向和负向前瞻/后顾)、捕获组与命名组、替换操作、分割字符串、修饰符(如忽略大小写和多行模式)及 Unicode 支持。通过这些功能,可以高效地处理复杂文本数据。
|
2月前
|
存储 Java 数据处理
Java 数组的高级用法
在 Java 中,数组不仅可以存储同类型的数据,还支持多种高级用法,如多维数组(常用于矩阵)、动态创建数组、克隆数组、使用 `java.util.Arrays` 进行排序和搜索、与集合相互转换、增强 for 循环遍历、匿名数组传递以及利用 `Arrays.equals()` 比较数组内容。这些技巧能提升代码的灵活性和可读性,适用于更复杂的数据处理场景。
下一篇
无影云桌面