【问题标题】:Simplest/Fastest way to input elements in an List/array (Java)?在列表/数组(Java)中输入元素的最简单/最快的方法?
【发布时间】:2023-03-13 19:46:01
【问题描述】:

以下代码使用Java8运行良好

List<String> strings = IntStream
.range(0,scanner.nextInt())
.mapToObj(i -> scanner.next())
.collect(Collectors.toList());

这是做什么的:

for(i=0; i<scanner.nextInt(); i++){
    list.add(sc.next());
}

构建输入整数列表的合适(类似)方法是什么?也欢迎其他方式!

【问题讨论】:

  • 程序的可读性,而不是性能。 I/O 开销可能是此处理所用时间的 100 倍。
  • @chrylis,我没有发现这段代码难以辨认。您愿意稍微解释一下或指出关于 I/O 开销的正确方向吗?另请注意,我正在尝试熟悉 Java8。
  • 答案应该很明显。如果next()返回一个字符串,则调用一个返回整数的方法,即nextInt()。或添加.map(Integer::valueOf)
  • 我没有说它难以辨认。我说过,一般来说,追求性能不是你应该优先考虑的问题。
  • 哦,我在收到 TLE 的论坛中遇到了这种编码形式。再加上这个表格对我来说是新的,所以我想我会做一些实验并同时学习。 for(i=0; i&lt;scanner.nextInt(); i++){ list.add(sc.next()); } 这是首选方式吗?

标签: java performance lambda


【解决方案1】:

好的,我想出了这个。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * Created by sbsatter on 3/6/17.
 */
public class Main {
    public static void main(String ... args) {
        Scanner sc = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();

        list = IntStream.range(0,sc.nextInt()).map(i -> sc.nextInt()).boxed().collect(Collectors.toList());
        System.out.println(list);
    }
}

还有更好的选择吗?

【讨论】:

  • 这不会编译。 boxed()Stream 上不存在(由mapToObj() 返回)。
  • 这个编译并在我的设备上完美运行。你有Java8吗?您是否添加了正确的导入?
  • 这是不可能的。您可能遇到了复制/粘贴错误。
  • 我运行了这个确切的代码。现已编辑,请查收。以前,我实际上写了这行。但是,这一次,我先运行它来检查!请查找盒装文档:[docs.oracle.com/javase/8/docs/api/java/util/stream/…
  • 现在您将mapToObj 更改为map 即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 2016-08-21
  • 2016-09-30
  • 2019-07-07
  • 2011-06-01
  • 1970-01-01
相关资源
最近更新 更多