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

推荐订阅源

GbyAI
GbyAI
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
D
Docker
Blog — PlanetScale
Blog — PlanetScale
罗磊的独立博客
美团技术团队
V
V2EX
Last Week in AI
Last Week in AI
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Microsoft Security Blog
Microsoft Security Blog
Microsoft Azure Blog
Microsoft Azure Blog
人人都是产品经理
人人都是产品经理
M
MIT News - Artificial intelligence
P
Proofpoint News Feed
B
Blog RSS Feed
博客园_首页
B
Blog
博客园 - 叶小钗
I
InfoQ
WordPress大学
WordPress大学
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
Latest news
Latest news
W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
Cyberwarzone
Cyberwarzone
Scott Helme
Scott Helme
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
C
CXSECURITY Database RSS Feed - CXSecurity.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
N
News and Events Feed by Topic
S
Secure Thoughts
The Hacker News
The Hacker News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News

Java for You

字节面试高频百题(二) - Java for You - java4u 字节面试高频百题(一) - Java for You - java4u 还在手写 Getter/Setter 方法吗?Lombok 让你的代码更简洁! - Java for You - java4u 【Java面试题01】基础知识精选 - Java for You - java4u 我是如何放弃 JSP,转向 REST 编程的 - Java for You - java4u 【SpringBoot教程02】SpringBoot 项目的这些文件都是干啥用的? - Java for You - java4u 【SpringBoot教程01】五分钟快速构建第一个 SpringBoot 应用 - Java for You - java4u 【Java基础教程13】Java异常处理进阶篇 - Java for You - java4u 【Java基础教程12】Java异常处理基础篇 - 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