Java:将回调应用于数组值

mel*_*oon 8 java

我正在寻找一种简单的方法将回调方法应用于String数组中的每个元素.例如在PHP中,我可以像这样在数组中创建所有元素:

$array = array_map('strtolower', $array);
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以在Java中实现这一目标?

Col*_*inD 7

首先,Java中的对象数组远不如Lists,所以如果可能的话,你应该真正使用它们.您可以创建的视图String[]List<String>使用Arrays.asList.

其次,Java还没有lambda表达式或方法引用,所以没有很好的方法可以做到这一点......并且通过名称引用方法是一个String非常容易出错且不是一个好主意.

也就是说,Guava提供了一些基本的功能元素,可以让你做你想做的事情:

public static final Function<String, String> TO_LOWER = 
    new Function<String, String>() {
      public String apply(String input) {
        return input.toLowerCase();
      }
    };

// returns a view of the input list with each string in all lower case
public static List<String> toLower(List<String> strings) {
  // transform in Guava is the functional "map" operation
  return Lists.transform(strings, TO_LOWER);
}
Run Code Online (Sandbox Code Playgroud)

与创建新数组或List将每个数组的小写版本复制String到其中不同,这不会List在创建时迭代原始元素,并且只需要很少的内存.

使用Java 8,lambda表达式和方法引用最终应该与高阶函数的扩展方法一起添加到Java中map,使这更容易(如下所示):

List<String> lowerCaseStrings = strings.map(String#toLowerCase);
Run Code Online (Sandbox Code Playgroud)


Mar*_*iot 3

没有使用内置功能的单行代码,但您当然可以通过迭代数组来匹配功能:

 String[] arr = new String[...];

 ...

 for(int i = 0; i < arr.length; i++){
     arr[i] = arr[i].toLowerCase();
 }
Run Code Online (Sandbox Code Playgroud)