如何在Java向量上使用Ruby风格的映射



我有一种感觉,如果我知道我想做什么的Java术语,谷歌可以很快回答这个问题,但我不知道,所以在Stack Overflow中我相信。:)

我有一个Objects的向量,并且我想要一个包含向量中每个元素的字符串表示的Strings数组,如通过对每个元素调用toString()生成的。

在Ruby(或Perl,或Python,或Scheme,或使用map方法的数百万种其他语言中的任何一种)中,我将如何做到这一点:

vector.map(&:to_s) do |string|
  # do stuff
end

我如何在Java中执行等效操作?我想写这样的东西:

Vector<Object> vector = ...;
String[] strings = vector.map(somethingThatMagicallyCallsToString);

有什么想法吗?

如果你可以引进Guava,你可以使用它的transform功能。

Iterable<String> strings = Iterables.transform(vector, Functions.toStringFunction());

transform的第二个参数是Function接口的一个实例。通常您会编写自己的实现,但Guava提供了toStringFunction()和其他一些实现。

一种方法可以是:

Vector<Object> vector = ...;
ArrayList strings = new ArrayList();
for (Object obj : vector) {
  strings.add(obj.toString());
}
return strings.toArray(new String[1]);

最新更新