将Iterable转换为Array

时间:2013-07-31 10:00:12

标签: java guava

我需要返回一个String数组。我使用Guava来分割String。请参阅以下代码

Iterable<String> arrayOfValues =  Splitter.on(";").split(myString);

它返回Iterable。但我需要一个String[]。有没有办法提供Iterator< Element >并将其转换为Array[]。非常感谢

8 个答案:

答案 0 :(得分:33)

答案 1 :(得分:20)

如果你使用普通的Java String.split(正则表达式)方法,你没问题。它返回一个String []。

"my;string".split(";")

String[] splits = mystring.split(";");

如果您不需要它们,请不要使用花哨的库。

答案 2 :(得分:4)

您也可以使用Guava的FluentIterable

FluentIterable.from(Splitter.on(":").split(mystring)).toArray(String.class)

答案 3 :(得分:4)

在Java 8中,我更喜欢使用流将可迭代对象转换为数组:

StreamSupport.stream(yourIterable.spliterator(), false).toArray(String[]::new)

答案 4 :(得分:2)

如果没有Guava,您可以将public static <String> String[] toArray(Iterable<String> itr) { ArrayList<String> ret = new ArrayList<>(); for(String t : itr) { ret.add(t); } return ret.toArray(new String[]); } 转换为类似

的数组
output.mp4

由于myriad issues with generic arrays in Java,如此轻易地编写此函数的泛型版本有点困难。

答案 5 :(得分:1)

我真的同意@rec的回答:如果不需要,请不要使用精美的库

但是,我强烈建议您阅读番石榴的分离器documentation

因为Java内置拆分器可能具有一些棘手的行为。

例如,假设您在输入中包含尾随逗号或连续逗号。 拆分后会返回什么?

  • null
  • ""
  • (丢弃)

;)

答案 6 :(得分:0)

在番石榴中,您可以将其转换为关注

 String test= "Welcome to java world";
 Iterable<String> tokens=Splitter.on(" ").split(test);
 String array[]=Iterables.toArray(tokens,String.class);

如果您只想像数组那样访问Iterator元素,则无需转换。您可以通过索引

直接访问这些元素

e.g

 System.out.println(Iterables.get(tokens,2));

答案 7 :(得分:0)

尽管问题是“将Iterator转换为数组”,但答案只解释了如何将Iterable转换为数组。

因此,要使用Guava将Iterator转换为Array,您可以使用Iterators.toArray(Iterator<? extends T> iterator, Class<T> type)