【问题标题】:Java print List and arraylistJava打印List和arraylist
【发布时间】:2012-08-28 19:01:19
【问题描述】:

我希望有人可以帮助我解决我在 java 中遇到的一个小问题。我有一个 List 和一个 ArrayList ,我想将它们输出到一个文件中,每个文件的第一个元素彼此相邻打印。这是我到目前为止所拥有的:

List<String> uniqueList = new ArrayList<String>(dupMap.values());
for(String unique:uniqueList){
   out.write(unique + "\r");
}
ArrayList<Integer>subtr=new ArrayList<Integer>();
out.write("The number: " + subtr + "\r");

这将导致以下输出:

A
B
C
D
E
F
The number: [1, 2, 3, 4, 5, 6]

但我宁愿这样:

A The number: 1
B The number: 2

...等等。

我不确定从哪里开始获取这样的输出格式。我尝试将两组值都放入数组中,但我最终让自己感到困惑......这就是我最终来到这里的原因。任何帮助将不胜感激。

【问题讨论】:

  • ...你确定\r是对的吗?

标签: java arrays list


【解决方案1】:

只需这样做:

String br = System.getProperty("line.separator");
for (int i = 0, n = Math.min(uniqueList.size(), subtr.size()); i < n; i++)
    out.write(uniqueList.get(i) + " The number: " + subtr.get(i) + br);

【讨论】:

  • 谢谢!我以为这不会太复杂,但我一直迷路。你介意解释一下我在这里使用的 Math.min() 吗?
  • @User 当然!这只是一种保护措施,以防其中一个列表比另一个列表长,这样我们就不会尝试访问较短列表之外的索引。如果保证两个列表始终具有相同的大小,那么n = uniqueList.size() 就足够了。
【解决方案2】:

类似这样的:

List<String> uniqueList = new ArrayList<String>(dupMap.values());
ArrayList<Integer> subtr = new ArrayList<Integer>();
int length = Math.min(uniqueList.size(), substr.size());
for (int i = 0; i < length; i++) {
   out.write(uniqueList.get(i) + " The number: " + substr.get(i) + "\r");
}

【讨论】:

    【解决方案3】:
    List<String> uniqueList = new ArrayList<String>(dupMap.values());
    ArrayList<Integer>subtr=new ArrayList<Integer>();
    
    for (int i = 0; i < uniqueList.size(); i++){
       out.write(uniqueList.get(i) + "\r");
       out.write("The number: " + subtr.get(i) + "\n");
    }
    

    注意:这假定两个列表具有相同数量的元素。如果不是,您将迭代到Math.min(uniqueList.size(), subtr.size())

    【讨论】:

    • 这会给你一个例外,如果subtr.length() &lt; uniqueList.length()
    • @Baz 是的。但问题假设它们具有相同数量的元素。
    • 它们确实应该是相同的大小,我忘了指定。对不起。
    【解决方案4】:

    应该这样做:

    int maxLength = Math.min(uniqueList.size(), subtr.size());
    for(int i = 0; i < maxLength; i++)
    {
        out.print(uniqueList.get(i) + " The number: " + subtr.get(i) + "\r");
    }
    

    【讨论】:

    • 您应该删除"\r" 并替换为新行或println
    • @Desolator 你能解释一下原因吗?
    • 有些环境不接受\r 作为换行符,\r 是回车符,不是换行符。它将替换为\n。然而,最重要的是,使用println 是最便携的。
    • @Desolator 很公平,但是 OP 使用了"\r",所以我想这只是合适的,如果我提供代码,那和他的一样。
    【解决方案5】:

    有效的方法是维护一个HashMap,其中uniqueList 作为键,subtr 作为值。然后遍历地图。

    Map<String,Integer> map = new HashMap<String,Integer>();
    
    for (int i = 0; i < uniqueList.size(); i++){
        map.put(key, subtr.get(i));
    }
    for (Map.Entry<String, Integer> entry : map.entrySet()) {
        out.println(entry.getKey() + " The Number : " + entry.getValue());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      相关资源
      最近更新 更多