java - 将重复值添加到 ArrayList

标签 java arraylist duplicates addition

堆栈溢出。

我正在尝试将 ArrayList 中的每个单词 4 个添加到 ArrayList 本身中。我的 ArrayList 中有两个字符串。一个是“java”,另一个是“程序”。我正在尝试编写一个程序,将每个单词总共添加 4 个单词。例如:我正在尝试添加 4 x java 和 4 x 程序。

这是我到目前为止所得到的。我不知道我做错了什么。 任何帮助或提示将不胜感激。

 /*
  * Write a method called quadList that takes an ArrayList of strings as a parameter
   *  and replaces every string with four of that same string. 
   *  For example, if the list stores the values ["java", "program"] 
   *  before the method is called,it should store the values 
   *  ["java ", " java ", " java ", " java ", "program", "program", "program", "program"]
   *   after the method finishes executing.
   */
  import java.util.ArrayList;


  public class Ex10_4_quadList {

public static void main(String[] args) {

    ArrayList<String> arrList = new ArrayList<String>();

    arrList.add("Java");
    arrList.add("Program");

    System.out.println("Before: " + arrList);
    quadList(arrList);
    System.out.println("after " + arrList);

}

private static void quadList(ArrayList<String> list) {

    for (int i = 0; i < list.size(); i++) {

        for (int j = 0; j < 4; j++) {
            String temp = list.get(i);
            list.add(temp);

        }

    }

}

  }

这是固定代码:

 public class Ex10_4_quadList {

public static void main(String[] args) {

    ArrayList<String> arrList = new ArrayList<String>();

    arrList.add("Java");
    arrList.add("Program");

    System.out.println("Before: " + arrList);
    quadList(arrList);
    Collections.sort(arrList);
    System.out.println("after " + arrList);

}

private static void quadList(ArrayList<String> list) {

    int initial = list.size();

    for (int i = 0; i < initial; i++) {

        for (int j = 0; j < 3; j++) {
            String temp = list.get(i);
            list.add(temp);

        }

    }

}

 }

最佳答案

理想情况下,您可以使用 foreach 样式的循环,而不是使用索引进行迭代。然而,这意味着您无法在迭代时更改列表。因此,您需要将成员添加到新列表中,然后添加所有成员:

List<String> duplicates = new ArrayList<>();
for (String member: list) {
    for (int i = 0; i < 4; i++) {
        duplicates.add(member);
    }
}
list.addAll(duplicates);

如果您使用 Java 8,因此可以访问流,则可以使用许多快捷方式:

list.addAll(list.stream()
    .flatMap(m -> Stream.generate(() -> m).limit(4))
    .collect(Collectors.toList());

这段代码表示,对于列表中的每个成员,将其转换为该项目的 4 个副本,然后将所有这些副本收集为一个列表,并将它们添加到原始列表中。

关于java - 将重复值添加到 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28354708/

相关文章:

JavaFX 更改不同类的 Pane 颜色

java - 电脑socket的速度是120MB/s,正常吗?

java - C++ 中的 JNI Java

java - 如何使用 boja 类将一个列表添加到另一个列表

c# - 创建实体时发现重复记录错误

java - 将一个 d 数组转换为可变大小的 java 矩阵

java - 如何动态删除 JPanel?

java - 使用 c :foreach, 迭代包含 Bean 对象的 ArrayList 不起作用

php - 如何在不查询整个数据库的情况下检查重复条目?

file - Google Apps 脚本复制文件