map 结合并行流 parallelStream进行遍历

业务场景中不乏需要将数据转换成map哈希映射结构,然后对其进行遍历数据处理分析,下面我们讲下用并行流方式来遍历map,一定程度上提高数据遍历处理效率

Stream 有串行和并行两种,串行 Stream 上的操作是在一个线程中依次完成,而并行 Stream 则是在多个线程上同时执行。一定程度上效率比串行高。

/**
 * java遍历map的多种方法
 * 1、普通的循环遍历
 * 2、jdk8以上的新特性
 *
 */
public class Map {
    @Test
    public void test1() {
        map.forEach((key, value) -> {
            System.out.println(key + "=" + value);
        });
    }

    /**
     * 多线程并行执行
     */
    @Test
    public void test2() {
        map.keySet().parallelStream().forEach(key -> {
            System.out.println(key + "=" + map.get(key));
        });
    }

    /**
     * 串行执行
     */
    @Test
    public void test3() {
        map.keySet().stream().forEach(key -> {
            System.out.println(key + "=" + map.get(key));
        });
    }


    /**
     * *********************************************
     * 以下为java常规遍历map的方式
     * 1.优先选择foreach
     * 2.遍历List的同时要移除元素推荐
### Java Stream API 的并行操作 #### 并行流简介 在 Java 8 中引入了 Stream API,这为处理集合数据提供了一种强大且简洁的方法。Stream API 支持顺序和并行两种模式来执行操作序列。对于大规模数据集而言,并行流可以利用多核处理器的优势提高程序运行效率[^3]。 #### 创建并行流 可以通过调用 `stream.parallel()` 或者直接使用集合对象上的 `parallelStream` 方法创建一个并行流实例: ```java List<String> list = Arrays.asList("apple", "banana", "orange"); // 方式一:通过stream().parallel()转换成并行流 list.stream().parallel(); // 方式二:直接获取并行流 list.parallelStream(); ``` #### 执行中间操作与终端操作 当定义好了一个并行流之后,就可以像普通的串行流那样链式地添加各种中间操作(如过滤、映射等),最后再指定一个终止操作完成整个流水线的操作。需要注意的是,在某些情况下,并行流可能会改变元素之间的相对顺序;如果希望保持原有顺序,则可以在创建时传入参数 `Spliterator.ORDERED` 来确保有序性[^5]。 下面是一个简单的例子展示了如何使用并行流来进行文件读取并将每一行转为大写形式打印出来: ```java import java.io.BufferedReader; import java.nio.file.Files; public class ParallelStreamExample { public static void main(String[] args) throws Exception { try (BufferedReader reader = Files.newBufferedReader(inputFile.toPath())) { reader.lines() .parallel() // 将流设置为并行模式 .map(String::toUpperCase) .forEach(System.out::println); } } } ``` 在这个案例里,`lines()` 返回的是由缓冲区中的各行组成的流,接着将其设为并行方式并通过 map 函数把每条记录都变成全大写字母的形式,最终遍历输出结果到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值