我正在寻找一种简单的方法将回调方法应用于String数组中的每个元素.例如在PHP中,我可以像这样在数组中创建所有元素:
$array = array_map('strtolower', $array);
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以在Java中实现这一目标?
首先,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)
没有使用内置功能的单行代码,但您当然可以通过迭代数组来匹配功能:
String[] arr = new String[...];
...
for(int i = 0; i < arr.length; i++){
arr[i] = arr[i].toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4379 次 |
| 最近记录: |