Java : 如何将Java数组转换为Iterable?

1,223 阅读3分钟

Java - 如何将Java数组转换为Iterable?

在java中使用Stream api将数组转换为可迭代的快速指南,其中有两种方法的示例程序。

1.概述

在本教程中,我们将通过示例程序学习如何以不同的方式将java数组转换为可迭代数。

首先,我们将深入了解如何在数组上迭代的基本方法。接下来,如何使用传统的java api将数组转换为可迭代,最后使用java 8 api进行java数组迭代

奖励部分是如何用分隔符将字符串转换为可迭代的。

2.使用循环在数组上创建一个迭代器

在数组上运行 从 for循环,创建可迭代逻辑,根据索引从数组中获取每个值。

package com.javaprogramto.arrays.toiterabale;
 
/**
 *
 * Array Iterate example using loops
 *
 * @author javaprogramto.com
 *
 */
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之前的传统java将Java数组转换为Iterable

首先,我们将使用Arrays.asList()方法将数组转换为列表。接下来,在java中使用list.iterator() 方法将列表转换成Iterable。

最后,在while循环中迭代迭代器,以获得所有的值。

数组到迭代器的例子。

package com.javaprogramto.arrays.toiterabale;
 
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
 
/**
 *
 * Example to convert Java Array to Iterable before Java 8
 *
 * @author javaprogramto.com
 *
 */
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流将Java数组转换为Iterable

在上面的章节中,我们调用 Arrays.asList() 方法将数组转换为列表。但是,现在将使用java 8 stream api中的另一个方法 Arrays.stream(array) 方法,该方法接收输入数组并返回数组类型的流。

Arrays.stream() 方法提供了访问流api的数组,并在较大的数组上使用并行执行的力量。

但是现在,在得到 Stream 对象后,你需要在stream上调用iterator()方法,将Stream转换为可迭代的。

不要担心,如果你是java 8的新手,下面的程序会被分解成多个步骤。而且还提供了一个单行的解决方案。

import java.util.Arrays;
import java.util.Iterator;
import java.util.stream.Stream;
 
/**
 *
 * Example to convert Java Array to Iterable using Java 8 Arrays.stream()
 *
 * @author javaprogramto.com
 *
 */
public class JavaArrayToIterableExampleJava8 {
 
    public static void main(String[] args) {
 
        // string array
        String[] names = new String[] {"john", "Amal", "Paul"};
 
        System.out.println("Multi line solution");
        // 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("\nIn single line");
        Arrays.stream(names).iterator().forEachRemaining(name -> System.out.println(name));
    }
}

多行和单行解决方案提供相同的输出。如果你打算在实时项目中使用,那么就把它作为单行语句使用,因为你希望像专家一样,利用流的优势。

Multi line solution
john
Amal
Paul
 
In single line
john
Amal
Paul

5.奖励 - 将字符串转换为可迭代的

如果你正确理解了上面的代码,在字符串上应用迭代是非常简单的。我们现在需要的是将字符串转换为带空格的字符串数组,或者如果字符串有任何分隔符。

在得到字符串数组后,应用与java 8 streams相同的逻辑,如下所示。

public class JavaStringToIterableExampleJava9 {
 
    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("Multi line solution");
        // 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("\nIn single line");
        Arrays.stream(numbersArray).iterator().forEachRemaining(name -> System.out.println(name));
    }
}

输出

Multi line solution
1
2
3
4
5
6
 
In single line
1
2
3
4
5
6

6.总结

在这篇文章中,你已经看到了如何使用传统的和新的java 8 api将数组转换为可迭代的,并从迭代器中获取每个值。还有,如何在java中把字符串转换为迭代器?