stream简单操作

package com.xiangshuai.lambda;

import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author lqx
 * @ClassName StreamDemo1
 * @description 参考网址 https://www.runoob.com/java/java8-streams.html
 * 一、Stream介绍:
 * Stream API是JDK8新添加的处理集合的关键组件,提供了多种的函数式操作。
引入全新的Stream API。这里的流Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同。
Stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者打批量数据操作。
只要给出需要对其包含的元素执行什么操作,比如“过滤掉长度大于10的字符串”、“获取每个字符串的首字母”等,Stream会隐式地在内部进行遍历,做出相应的数据转换。
Java有关List的stream基本操作
Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。
这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选、排序、聚合等。
和以前的collection操作不同,Stream操作还有两个基础的特征:
Pipelining:中间操作都会返回流对象本身。这样多个操作可以串联成一个管道,如同流式风格。这样做可以对操作进行优化,比如延迟执行和短路。
内部迭代:以前对集合遍历都是通过Iterator或者ForEach的方式,显示的在集合外部进行迭代,这叫做外部迭代。Stream提供了内部迭代的方式,通过访问者模式实现。
一些方法:
stream();为集合创建串行流。
parallelStream(),为集合创建并行流。是流并行处理程序的代替方法。
forEach(),Stream提供的新的方法来迭代流中的每个数据。
map(),方法用于映射每个元素到对应的结果。map(i -> i*i)集合中的每个元素变为平方
filter(),方法用于通过设置的条件过滤出元素,filter(string -> string.isEmpty()) 过滤出空字符串。
limit(),方法用于获取指定数量的流。limit(10) 获取10条数据
sorted(),方法用于对流进行排序。
collect(Collectors.toList()),用于返回列表或字符串,Collectors.joining(",");将集合转换成逗号隔开的字符串
二、Stream常见操作API介绍
  1.聚合操作
  2.stream的处理流程
       2.1 获取数据源
       2.1 数据转换
       2.3 获取结果
  3. 获取Stream对象
     3.1 从集合或数组中获取
        Collections.stream()如list.stream()
        Collections.parallelStream()如list.parallelStream()
        Arrays.stream()
     3.2 BufferReader
     3.3 静态工厂
         java.util.stream..IntStream.range(, )
         java.nio.file..Files.walk()
     3.4 自定构建
         java.util..Spliterator
     3.5 更多的方式..




 * @date 2020/6/21 16:33
 */
public class StreamDemo1 {
    public static void main(String[] args) {
        //查filter()过滤出字符串大于10的集合元素
        List<String> list=new ArrayList<>();
        list.add("123");list.add("你好123");list.add("你好123---sssssssssss");
        list.add("你好123---sssscccc"); list.add("你好123");
        //先filter过滤后的stream用collect方法转成list
        list.stream().filter(str->str.length()>10).collect(Collectors.toList());
        System.out.println(list);

        //map--将list里的对象id和对象弄成key,value
        List<Order> orders=new ArrayList<>();
        StreamDemo1 streamDemo1 = new StreamDemo1();
        orders.add(streamDemo1.new Order(1,"商品1"));
        orders.add(streamDemo1.new Order(2,"商品2"));
        orders.add(streamDemo1.new Order(3,"商品3"));
//        第一个参数Order::getId 表示选择Order的getId作为map的key值;
//        第二个参数v -> v表示选择将原来的对象作为map的value值;
//        第三个参数(v1, v2) -> v1中,如果v1与v2的key值相同,选择v1作为那个key所对应的value值
        Map<Integer, Order> collect = orders.stream().collect(Collectors.toMap(Order::getId, c -> c, (k1, k2) -> k2));
        Set<Integer> integers = collect.keySet();
        integers.stream().forEach(id->{
            System.out.println(collect.get(id));
        });

        //将一个List对象的id用逗号连起来
        String ids = orders.stream().map(Order::getId).map(String::valueOf).collect(Collectors.joining(","));
        System.out.println(ids);
    }

    class  Order{
        private int id;
        private String name;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public Order(int id, String name) {
            this.id = id;
            this.name = name;
        }

        public Order() {
        }

        @Override
        public String toString() {
            return "Order{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    '}';
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.1 什么是Stream? 1.2 什么是字节序列? 1.3 Stream的构造函数 1.4 Stream的重要属性及方法 1.5 Stream的示例 1.6 Stream异步读写 1.7 Stream 和其子类的类图 2.1 为什么要介绍 TextReader? 2.2 TextReader的常用属性和方法 2.3 TextReader 示例 2.4 从StreamReader想到多态 2.5 简单介绍下Encoding 编码 2.6 StreamReader 的定义及作用 2.7 StreamReader 类的常用方法属性 2.8 StreamReader示例 3.1 为何介绍TextWriter? 3.2 TextWriter的构造,常用属性和方法 3.3 IFormatProvider的简单介绍 3.4 如何理解StreamWriter? 3.5 StreamWriter属性 3.6 StreamWriter示例 4.1 如何去理解FileStream? 4.2 FileStream的重要性 4.3 FileStream常用构造函数(重要) 4.4 非托管参数SafeFileHandle简单介绍 4.5 FileStream常用属性介绍 4.6 FileStream常用方法介绍 4.7 FileStream示例1:*文件的新建和拷贝(主要演示文件同步和异步操作) 4.8 FileStream示例2:*实现文件本地分段上传 5.1 简单介绍一下MemoryStream 5.2 MemoryStream和FileStream的区别 5.3 通过部分源码深入了解下MemoryStream 5.4 分析MemorySteam最常见的OutOfMemory异常 5.5 MemoryStream 的构造 5.6 MemoryStream 的属性 5.7 MemoryStream 的方法 5.8 MemoryStream 简单示例 : XmlWriter中使用MemoryStream 5.9 MemoryStream 简单示例 :自定义一个处理图片的HttpHandler 6.1 简单介绍一下BufferedStream 6.2 如何理解缓冲区? 6.3 BufferedStream的优势 6.4 从BufferedStream 中学习装饰模式 6.5 如何理解装饰模式 6.6 再次理解下装饰模式在Stream中的作用 6.7 BufferedStream的构造 6.8 BufferedStream的属性 6.9 BufferedStream的方法 6.10 简单示例:利用socket 读取网页并保存在本地 7.1 NetworkStream的作用 7.2 简单介绍下TCP/IP 协议和相关层次 7.3 简单说明下 TCP和UDP的区别 7.4 简单介绍下套接字(Socket)的概念 7.5 简单介绍下TcpClient,TcpListener,IPEndPoint类的作用 7.6 使用NetworkStream的注意事项和局限性 7.7 NetworkStream的构造 7.8 NetworkStream的属性 7.9 NetworkStream的方法 7.10 NetwrokStream简单示例 7.11 创建一个客户端向服务端传输图片的小示例 版权归作者所有,仅供学习参考
是的,Map 接口提供了一些方法来支持使用 Stream 流进行操作。你可以将 Map 转换为 Stream 流,然后使用流的操作方法进行过滤、映射、排序等操作。 下面是一些常用的与 Stream 相关的 Map 方法: - `entrySet()`: 将 Map 转换为包含键值对的 Set 集合。 - `keySet()`: 将 Map 的键转换为 Set 集合。 - `values()`: 将 Map 的值转换为 Collection 集合。 - `forEach(BiConsumer)`: 对 Map 中的每个键值对执行指定的操作。 - `stream()`: 将 Map 转换为顺序流(Stream)。 - `parallelStream()`: 将 Map 转换为并行流(ParallelStream)。 这些方法可以使你更方便地在 Map 上使用 Stream操作。例如,你可以使用 `entrySet()` 方法将 Map 转换为键值对的 Set,然后使用 Stream 流对键值对进行过滤、映射等操作。 以下是一个示例代码,展示了如何使用 Stream操作 Map: ```java import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("A", 1); map.put("B", 2); map.put("C", 3); map.put("D", 4); // 使用 Stream 过滤出值大于 2 的键值对,并打印出结果 map.entrySet() .stream() .filter(entry -> entry.getValue() > 2) .forEach(entry -> System.out.println(entry.getKey() + ": " + entry.getValue())); } } ``` 在上述示例中,我们首先创建了一个包含键值对的 Map。然后,我们使用 `entrySet().stream()` 将 Map 转换为 Stream 流。接着我们使用 `filter()` 方法筛选出值大于 2 的键值对,并使用 `forEach()` 方法打印出结果。输出结果是键 "C" 和对应的值 3。 这只是 Stream操作 Map 的一个简单示例,你可以根据具体需求使用不同的流操作方法来对 Map 进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值