Как передать ArrayList в качестве аргумента

216
01 марта 2022, 13:00

Имеется первый класс One с конструктором, принимающим в качестве аргумента ArrayList типа String, :

class One{
   ArrayList<String> al = new ArrayList<>(); 
   One(ArrayList<String> a){
        for(int i = 0; i < a.size(); i++)
            this.al.add(a.get(i));
}

Имеется второй класс Two (агрегирующий массив типа One):

class Two{
    ArrayList<One> a = new ArrayList<>();
    public void addValue(One one){
        a.add(one);
    }
}

Как правильно записать передачу аргумента типа `ArrayList?

Two two = new Two();
two.addValue(????);      // тут нужно добавить текст "тактовая частота"
two.addValue(????);      // тут нужно добавить текст "процессор" и "объем ОЗУ"
two.addValue(????);      // тут нужно добавить "дорожка", "стек", "сортировка"

P.S. Читал этот топик

ОТВЕТЫ:

1. Метод "двойной скобки":

ArrayList<String> list = new ArrayList<String>() {{
    add("text1");
    add("text2");
    add("text3");
}};

Какие ещё есть варианты?

Answer 1
  1. я бы написал класс One так:

    class One{
       ArrayList<String> al; 
       One(List<String> a){
           al = new ArrayList<>(a);
       }
    }
    
  2. А вот решение:

    two.addValue(new One(Arrays.asList(new String[] {"тактовая частота"})));
    two.addValue(new One(Arrays.asList(new String[] {"процессор", "объем ОЗУ"})));
    two.addValue(new One(Arrays.asList(new String[] {"дорожка", "стек", "сортировка"})));
    
Answer 2

Как по мне, есть варианты лучше и проще. Например, так :

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class One {
    List<String> al = new ArrayList<>();
    One(String...names) {
        al.addAll(Arrays.asList(names));
    }
}
class Two{
    List<One> a = new ArrayList<>();
    public Two addValue(One one){
        a.add(one);
        return this;
    }
    public Two addValue(String ... one){
        return addValue(new One (one));
    }
}
class Test {
    public void test (){
        Two two = new Two()
                .addValue("тактовая частота")
                .addValue("процессор", "объем ОЗУ")
                .addValue("дорожка", "стек", "сортировка");
    }
}
Answer 3
class Two{
  ArrayList<One> a = new ArrayList<>();
  public Two addValue(One one){
    a.add(one);
    return this;
  }
}
Two two = new Two().
  addValue(new One(new ArrayList<String>() {{ add("тактовая частота"); }})).
  addValue(new One(new ArrayList<String>() {{ add("процессор"); add("объем ОЗУ"); }}));
READ ALSO
Response не отдаёт данные в другой класс

Response не отдаёт данные в другой класс

что я делаю не так, не могу получить в другом классе вот это

166
Как запретить поворот экрана при сканировании штрих кода?

Как запретить поворот экрана при сканировании штрих кода?

Использую библиотеку ZXing для распознавания кодовПри сканировании экран переворачивается в горизонтальный

128
Интерфейс с шифром Цезаря Java

Интерфейс с шифром Цезаря Java

Помогите решить задачкуЕсть рабочий код шифра Цезаря, есть написанный интерфейс, не могу все это совместить в одно

83
Java RMI не работает в интернете

Java RMI не работает в интернете

Я только пробую работать с RMIЗапускаю клиент и сервер на разных компьютерах

135