为什么String列表没有forEach方法?

Daw*_*wid 6 java arrays string foreach

我有一个问题,为什么String[] args变量没有forEach方法?我找不到任何类型不是Serializable或Collection的信息,因为forEach方法实现了Serializable。

例如,我有简单的Java主类。如果要使用forEach方法,则必须先导入Arrays类,然后stream使用forEach如下所示的使用方法:

import java.util.Arrays;

public class MyClass {
  public static void main(String[] args) {
    Arrays.stream(args).forEach(System.out::println);
  }
}
Run Code Online (Sandbox Code Playgroud)

为什么不可能像这样简单呢?

args.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

cam*_*024 14

简短的答案:数组上没有forEach定义方法。

更长的答案:因为不需要它。数组类型(使用[],不是List<>)表示内存中的低级结构,更适合于低级优化而不是高级功能样式的代码。机器的硬件非常类似于C之类的命令式,有状态的样式,而不是Haskell之类的功能性无状态样式。因此,在创建较低级别的数据结构(如基本数组)时,为其提供更高级的功能并不一定有意义。如果你真的想要一个forEach()方法,用平凡包起来Arrays.asList()Arrays.stream()List.of()(取决于Java版本)。

  • 我明白你的意思了。我猜“ Java设计师认为我们不需要它”更准确 (2认同)

jsv*_*ing 6

主要方法采用type的一个参数String[]。这是一个ArrayString秒。

Lists和Arrays是两件事,只有前者确实提供了foreach方法。


kir*_*han 5

不只是字符串数组,任何对象或原始类型的数组都没有此功能,因为数组是与其他集合实现不同的数据严格性