【问题标题】:Concatenate string in Java arraylist在 Java 数组列表中连接字符串
【发布时间】:2015-01-08 16:19:57
【问题描述】:

这段代码给了我一个输出 -

first_name- [Tiger, Enrique]

family_name- [伍兹,伊格莱西亚斯]

import java.util.*;

public class al_Concatenate {
public static void main(String args[]) {

  // creating array list
  ArrayList<String> first_name  = new ArrayList<String>();
  ArrayList<String> family_name = new ArrayList<String>();
  Arraylist<String> name        = new Arraylist<String>(); 
  // add elements to the array list
  first_name.add("Tiger");
  first_name.add("Enrique");
  family_name.add("Woods");
  family_name.add("Iglesias");

  name.??

  //displaying the output
  System.out.println("first_name- " + first_name);
  System.out.println("family_name- "+ family_name);
  System.out.println("name- "+  name);
   }
}

但我需要这样输出(不使用循环,最好是单行代码)-

名称 - [泰格·伍兹,恩里克·伊格莱西亚斯]

提前致谢

我还想补充一点,arraylist 的大小是 2,但在我的实际程序中,它大约是 4500。我创建了这个示例以使其简单:) 我对帖子进行了一些编辑,很抱歉让它变得很麻烦:(

【问题讨论】:

  • fisrtName.get(0) + " " + family_name.get(0)...?
  • 这是否适用于指令不使用循环的类?如果没有,那你为什么不想使用循环呢?除非您使用的是 Java 8,否则没有循环确实没有办法做到这一点,因为没有任何内置的 Java 方法可以按照您描述的方式组合两个 ArrayLists
  • P.S.请不要使用原始的ArrayLists;第一个声明应该是ArrayList&lt;String&gt; first_name = new ArrayList&lt;&gt;();

标签: java string list arraylist concatenation


【解决方案1】:

数组元素上的循环是真正的方法。 您可能会使用 Java8 Streams 来管理它而无需循环,但这很愚蠢。

【讨论】:

  • 在处理大数据时,一行命令总是可以节省大量处理时间:)
  • 4500 个条目在我看来并不是真正的大数据。在这种情况下,担心运行时性能似乎是过早的优化。最简单的解决方案可能就足够了。
【解决方案2】:

您必须使用 for 循环。没有循环就不能遍历数组。

for(int i = 0; i<Math.min(first_name.size(), family_name.size()); i++) {
            System.out.println(first_name.get(i) + " " + family_name.get(i));
}

【讨论】:

    【解决方案3】:

    好吧,这是一个适合你的单行代码(使用 Java 8),即使它很傻:

    System.out.println(IntStream.range(0, first_name.size()).mapToObj(n -> first_name.get(n) + " " + family_name.get(n)).collect(Collectors.toList()).toString());
    

    我已经对此进行了测试,它可以正常工作(经过几次尝试)。

    解释:IntStream.range 创建一个整数流,从 0 到 first_name.size()-1(这是一个半开范围)。 mapToObj 将该范围内的每个整数 n 映射到通过连接两个数组中的字符串创建的字符串,中间有一个空格。 collect 然后创建由mapToObj 创建的所有字符串的ListListtoString() 方法将字符串放在用逗号分隔的方括号中,就像在原始问题中一样。 (我可以省略toString(),因为println 会自动完成。)

    附:我不知道这个解决方案实际上是愚蠢的——这是对先前答案的开玩笑引用。函数式编程爱好者可能会认为这是一种更好的做事方式。就个人而言,我不确定哪个更具可读性,但是如果您还不熟悉 FP,这种解决方案可能需要一些时间来适应。

    【讨论】:

    • 谢谢 ajb。它对我有用,我想要这个。但是我想问你为什么说这个方法很傻?
    • @ArnabSarkar 参考 ilia_b 的回答。
    • 如果是讽刺性的评论,那就太好了:P,因为在处理大数据时,一行命令总是可以节省大量的处理时间:)
    【解决方案4】:

    您可以使用地图而不是 2 个 ArrayList 吗?你会得到类似的东西:

    Map<String, String> names = new HashMap<String, String>();
    names.put("Tiger", "Woods");
    names.put("Enrique", "Iglesias");
    
    System.out.println("name - " + names);
    

    输出将是:

    name - {Tiger=Woods, Enrique=Iglesias}
    

    它会满足您的需求吗?

    【讨论】:

      【解决方案5】:

      试试这个打印语句:

      System.out.println("name - [" + first_name.get(0) + " " + family_name.get(0) + ", " + first_name.get(1) + " " + family_name.get( 1) + "]");

      这行得通吗?

      【讨论】:

        【解决方案6】:

        递归可以在这种情况下工作,如果不需要循环:

        static void print(List l1, List l2) {
            if(!l1.isEmpty()) {
                System.out.println("first_name: " + l1.get(0) + "; family_name: " + l2.get(0));
                print(l1.subList(1, l1.size()), l2.subList(1, l2.size()));
            }
        }
        

        【讨论】:

          【解决方案7】:

          而不是使用:

          System.out.println();

          使用下面的代码打印后不会跳行:

          System.out.print()

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-13
            • 1970-01-01
            • 2017-04-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多