惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
博客园_首页
IT之家
IT之家
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Vercel News
Vercel News
美团技术团队
D
Docker
WordPress大学
WordPress大学
T
Tailwind CSS Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
Y
Y Combinator Blog
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
Google Developers Blog
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
GbyAI
GbyAI
Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans

Java for You

AI写代码开始像带团队:Qwen Code补上工作流控制台 - Java for You - java4u AI会聊天却不会改3D模型?从Pascal 1.0看懂MCP工具调用 - Java for You - java4u 让AI审科学公式,它最适合当比较员而非裁判 - Java for You - java4u 智能体上线最难的不是提示词:Agents API开始托管运行时 - Java for You - java4u AI任务一多就堵车:问题可能不在模型速度 - Java for You - java4u AI能写无人机控制代码后,安全边界不能只守提示词 - Java for You - java4u AI代码扫描能批量开了,但它还不能替你挡住合并 - Java for You - java4u 机器人动作误差降近九成,真正该先看数据切分 - Java for You - java4u 图片一多首字就慢?用EPD拆开多模态推理三段路 - Java for You - java4u 蛋白预测快2.9倍,科学AI最难的是让整条流水线不空转 - Java for You - java4u NVIDIA把供应链专家经验训练进模型,关键不是换一个更大模型 - Java for You - java4u 人人都能问公司数据之后,数据分析师反而更重要了 - Java for You - java4u 语音AI开始边听边说,改变的不只是响应速度 - Java for You - java4u Agent到底比一次大模型调用多了什么?小白从这张流程图看懂 - Java for You - java4u ChatGPT服务10亿周用户后,最难扩展的可能不是模型 - Java for You - java4u AI编码助手的日志也会泄密:先划清明文边界 - Java for You - java4u 同一套GPU多服务2.5倍用户,关键不是换模型 - Java for You - java4u NVIDIA把老师傅的判断变成了训练数据 - Java for You - java4u 4次真实越权事件提醒我们:智能体最怕认错环境 - Java for You - java4u 自动驾驶大模型开始统一看懂、建图和规划 - Java for You - java4u 开源天气模型已经很快,真正的瓶颈却在数据 - Java for You - java4u 智能体能读文件跑命令之后,企业权限该怎么管 - Java for You - java4u AI提交千禧难题证明,真正的门槛转向公开验证 - Java for You - java4u 语音AI最大的误区,是默认每个人都在安静房间里说话 - Java for You - java4u AI视频开始代码化:写HTML,为什么也能生产可复现视频 - Java for You - java4u GPT‑6 Astra企业应用、电脑操作与权限治理解析 - Java for You - java4u GPT‑6 Astra真正的变化:AI开始直接操作工作软件 - Java for You - java4u ChatGPT Images 2.5更新解析:模板、草图与迭代编辑 - Java for You - java4u GPT-6 Astra来了:AI开始从"聊天机器人"进化成数字员工了吗? - Java for You - java4u GPT-6 Astra来了:AI开始从"聊天机器人"进化成数字员工了吗? - Java for You - java4u
Java 数组迭代你用对了吗? - Java for You - java4u
蜗牛 · 2022-05-29 · via Java for You

67 / 100 SEO Score

Java 数组迭代

Java 数组是我们学习或工作中常用到的数据结构,我们会经常写数组迭代的代码,但你的代码是最优雅的么?

本文介绍三种 Java 数组迭代的方式以及最佳实践。

1、概述

首先我们通过遍历数组值的基本方法,来迭代数组。其次我们用 Java 比较古老的方法实现,最后我们再使用 Java 8 的 Stream API 将数组转成迭代器。

除此之外,我们可以把这个技巧应用在字符串的处理上。

2、通过循环进行数组迭代

通过循环在数组上建立迭代逻辑,根据索引从数组中获取相应的值。

代码:

package cn.java4u.codebase.array.iterator;

/**
 * @author 蜗牛
 * @from 公众号:蜗牛互联网
 */

public class ArrayIterate {

    public static void main(String[] args) {

        // string array
        String[] names = new String[] {"john""Amal""Paul"};         // iterating array over its values.         for(int index=0; index< names.length ; index++) {             System.out.println(names[index]);         }     } }

输出:

john
Amal
Paul

3、JDK 8 之前使用老方式进行数组迭代

JDK 8 之前,在数组转列表的时候,按照老方式我们通常使用  Arrays.asList() 方法先得到一个 list,然后使用 list.iterator() 方法得到一个迭代器,最后遍历迭代器里所有的值。

package cn.java4u.codebase.array.iterator;

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * @author 蜗牛
 * @from 公众号:蜗牛互联网
 */
public class JavaArrayToIterableExample {

    public static void main(String[] args) {

        // string array
        String[] names = new String[]{"john""Amal""Paul"};

        // string array to list conversion
        List<String> namesList = Arrays.asList(names);

        // List to iterable
        Iterator<String> it = namesList.iterator();

        // printing each value from iterator.
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

输出:

john
Amal
Paul

4、使用 Java 8 Stream 进行数组迭代

上一小节中,我们是通过  Arrays.asList() 把数组转成列表,现在我们使用 Java 8 Stream API 也可以做到,只需要用 Arrays.stream() 替换就行,它接收数组并返回数组类型的数据流。

stream() 方法可以把数组转换为 Stream 对象,在较大的数组上使用并行执行能力,然后需要调用 Stream 对象上的 iterator() 方法将 Stream 转换为 Iterator

参考代码如下:

package cn.java4u.codebase.array.iterator;

import java.util.Arrays;
import java.util.Iterator;
import java.util.stream.Stream;

/**
 * @author 蜗牛
 * @from 公众号:蜗牛互联网
 */
public class JavaArrayToIterableExampleJava8 {

    public static void main(String[] args) {

        // string array
        String[] names = new String[] {"john""Amal""Paul"};

        System.out.println("多行打印的解决方案");
        // Convert string array to Stream<String>
        Stream<String> namesList = Arrays.stream(names);

        // Stream to iterable
        Iterator<String> it = namesList.iterator();

        // printing each value from iterator.
        while(it.hasNext()) {
            System.out.println(it.next());
        }

        // singel line
        System.out.println("\n单行打印的解决方案");
        Arrays.stream(names).iterator().forEachRemaining(name -> System.out.println(name));
    }
}

多行和单行解决方案提供了相同的输出。如果你打算在实际项目中使用,最好用单行语句,因为这显得更像专家,并且利用了 Stream 的优势!

多行打印的解决方案
john
Amal
Paul

单行打印的解决方案
john
Amal
Paul

5、字符串的应用

如果你理解了上边的内容,那么在字符串上应用迭代能力就很简单了。

比如我们有个字符串,用空格分隔了不同的内容,假设是:1 2 3 4 5 6,我们需要把每个内容分别打印出来,此时就可以应用 Java 8 Stream 来进行迭代处理。

package cn.java4u.codebase.array.iterator;

import java.util.Arrays;
import java.util.Iterator;
import java.util.stream.Stream;

/**
 * @author 蜗牛
 * @from 公众号:蜗牛互联网
 */
public class JavaStringToIterableCase {
    public static void main(String[] args) {

        // string
        String numbers = "1 2 3 4 5 6";

        // string to string array
        String[] numbersArray = numbers.split(" ");

        System.out.println("多行打印的解决方案");
        // Convert string array to Stream<String>
        Stream<String> numbersList = Arrays.stream(numbersArray);

        // Stream to iterable
        Iterator<String> it = numbersList.iterator();

        // printing each value from iterator.
        while(it.hasNext()) {
            System.out.println(it.next());
        }

        // singel line
        System.out.println("\n单行打印的解决方案");
        Arrays.stream(numbersArray).iterator().forEachRemaining(name -> System.out.println(name));
    }
}

输出:

多行打印的解决方案
1
2
3
4
5
6

单行打印的解决方案
1
2
3
4
5
6

6、总结

本文介绍了如何对数组做迭代的三种方法,分别是循环方式、集合迭代器方式以及流迭代器方式,最后把流迭代器方式应用在了字符串的处理上。

推荐阅读:

1120页的Leetcode算法刷题笔记,完整版PDF开放下载!

《Java 工程师成神之路》.pdf

更多内容请收藏:Java for You