如何为字符串数组中的每个元素添加前缀?

5
我想知道在Java中是否有可以将一个定义好的字符串添加到一个字符串数组中的每个字符串前面的函数。
例如,
my_function({"apple", "orange", "ant"}, "eat an ")  would return {"eat an apple", "eat an orange", "eat an ant"}

目前,我编写了这个函数,但我想知道它是否已经存在。


不要认为这样的函数存在于标准 SDK 中。 - Karl-Bjørnar Øie
2
这个问题似乎有些不成熟。上面的代码示例不是完整的Java代码,而且“存在”是什么意思?如果它意味着Java SE的一部分,您可以通过检查java.util包轻松找到。我几乎无法想象有人会在一个严肃的、出版的Java库中实现这个小把戏,因为这种小把戏不适合放在一个库中。此外,方法声明public String[] myFunction(String prefix,String... items)可能更加实用。 - Andreas Krueger
4个回答

14

不行。由于这应该只是一个约三行的函数,你最好坚持使用你编码的那个函数。

更新

在Java 8中,语法非常简单,我甚至不确定是否值得为此创建一个函数:

List<String> eatFoods = foodNames.stream()
    .map(s -> "eat an " + s)
    .collect(Collectors.toList());

2

Java库中没有类似的东西。这不是Lisp,所以数组不是列表,也没有一堆面向列表的函数已经为你提供。这部分是由于Java的类型系统造成的,它会使为所有可以用于面向列表方式的不同类型提供如此多相似函数变得不切实际。

public String[] prepend(String[] input, String prepend) {
   String[] output = new String[input.length];
   for (int index = 0; index < input.length; index++) {
      output[index] = "" + prepend + input[index];
   }
   return output;
}

对于数组来说,这个技巧会起作用,但也有包括可调整大小的ArrayListVectorIterationLinkedList等的List接口,还有很多其它的。

由于面向对象编程的特殊性,每个不同的实现都必须实现 "prepend(...)",这会给任何想实现任何一种列表的人带来很大的负担。在Lisp中,这不是问题,因为函数可以独立于对象存储。


0

你觉得这样怎么样...

public static String[] appendTo(String toAppend, String... appendees) {
    for(int i=0;i<appendees.length;i++)
        appendees[i] = toAppend + appendees[i];
    return appendees;
}

String[] eating = appendTo("eat an ", "apple", "orange", "ant")

你的函数看起来像是返回一个新数组,但实际上它修改了旧数组。一般来说,@StriplingWarrior 的解决方案更受欢迎。 - vadipp

0
您可以使用带有.concat()方法引用的流。
    List<String> eatingFoods = foods.stream()
        .map("eat an "::concat)
        .collect(Collectors.toList());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接