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中把字符串转换为迭代器?