【问题标题】:How Can I Print Values and Index Numbers of an ArrayList without a Loop? [duplicate]如何在没有循环的情况下打印 ArrayList 的值和索引号? [复制]
【发布时间】:2016-06-13 23:49:43
【问题描述】:

到目前为止,这是我的代码:

import java.util.ArrayList;

public class BasicArraylists0 
{
    public static void main(String[] args) 
    {
        ArrayList arrayList = new ArrayList();

        arrayList.add(-113);
        arrayList.add(-113);

        System.out.println(arrayList); // prints [-113, -113]
    }
}

我想编写代码,以便在不使用任何 for 或 while 循环的情况下打印值(在这种情况下为 -113s)和不带任何括号的索引?

例如,我想打印类似

"插槽 0 有一个 -113" “插槽 1 有 -113” 等等。

好的,问题来了:

"创建一个可以容纳Integers的ArrayList。将数字-113的十个副本添加到ArrayList中。然后将ArrayList的内容显示在屏幕上。

不要使用循环。此外,不要对索引使用任何变量;您必须使用文字数字来引用每个插槽。”

【问题讨论】:

  • 简短的回答是你不能不编写代码来按照你想要的方式对其进行格式化,并且对集合的迭代需要一个循环。如果您使用的是 Java 8,则可以使用 lambda 功能,但这只是隐藏循环的语法糖。循环仍然存在。
  • 你能澄清你在输出中寻找什么吗?你在寻找类似0 -113, 1 -113 的东西吗?您将不得不遍历数组以进行正确的格式化等。
  • @user1875195 是的。例如,我想打印“Slot 0 has a -113”、“Slot 1 has a -113”等内容。
  • @Jiwon 你将不得不遍历数组。不能循环遍历数组有什么原因吗?
  • 顺便说一句,要创建一个包含整数的列表,请执行ArrayList<Integer> arrayList = new ArrayList<>();

标签: java arraylist


【解决方案1】:

如果没有某种形式的迭代,就没有任何方法可以解决这个问题。最好的方法是使用 for 循环,但您也可以使用 Java 8 的 Stream API 来循环而不显式使用循环。

IntStream.range(0, arrayList.size())
         .forEach(i -> System.out.println("Slot "+i+" has a "+arrayList.get(i));

如果您知道ArrayList 的大小,那么我想您可以直接复制粘贴整个内容:

System.out.println("Slot 0 has a "+arrayList.get(0));
System.out.println("Slot 1 has a "+arrayList.get(1));
System.out.println("Slot 2 has a "+arrayList.get(2));
System.out.println("Slot 3 has a "+arrayList.get(3));
System.out.println("Slot 4 has a "+arrayList.get(4));
System.out.println("Slot 5 has a "+arrayList.get(5));
System.out.println("Slot 6 has a "+arrayList.get(6));
System.out.println("Slot 7 has a "+arrayList.get(7));
System.out.println("Slot 8 has a "+arrayList.get(8));
System.out.println("Slot 9 has a "+arrayList.get(9));

【讨论】:

  • 谢谢你,4castle!
  • List arrayList = new ArrayList() { public String toString(){ ListIterator itr = this.listIterator(); StringBuffer r = new StringBuffer(); boolean hasNext = itr.hasNext(); while (hasNext){ int index = itr.nextIndex();对象 o = itr.next(); if (o == this) r.append(""); else r.append("Slot " + index + " 有一个 " + o); hasNext = itr.hasNext(); if (hasNext) r.append("\n"); }return r.toString(); } }; System.out.println(arrayList.toString());
【解决方案2】:

让我理解你的问题,你想打印一个没有循环的整个 ArrayList 吗?如果是这样,您可以使用以下代码:

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

这使用了新的 Java 8 lamda 特性。

【讨论】:

  • Streams 实际上不能在这里这样使用。他们希望索引在输出中,而 Streams 没有索引的概念。它必须首先映射到Map<Integer, Object>,但这并不高效。
  • 哦,我没看 id 部分,我的错。如果他需要打印 id,我认为他应该至少使用 1 个循环。
猜你喜欢
  • 2021-11-04
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
相关资源
最近更新 更多