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

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

例如,我有简单的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);
  }
}

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

args.forEach(System.out::println);

参考方案

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

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

Java:找到特定字符并获取子字符串 - java

我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…

Java-固定大小的列表与指定初始容量的列表之间的差异 - java

我在理解这一点上遇到了问题。当我们做 List<Integer> list = Arrays.asList(array); 我们不能在该列表上使用添加,删除之类的方法。我知道Arrays.asList()返回固定大小的列表。我不明白的是,如果我们创建一个具有指定初始容量的列表,例如List<Integer> list2 = new A…

Java string.hashcode()提供不同的值 - java

我已经在这个问题上停留了几个小时。我已经注释掉所有代码,认为这与数组超出范围有关,但是这种情况仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并稍后使用哈希码获取该数据。但是哈希值不断变化。public static void main(String[] args) { //only prior code is to access data char…

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

从方法返回数组-Java - java

private static Coordinate[] getCircleCoordintaes() { Coordinate coordinates[] = {new Coordinate(0, 0)}; return coordinates; } 以上程序工作正常。在上面的程序中,返回的坐标数组首先初始化了数组使用这条线Coordinate coordi…