Как получить доступ к указанному элементу c из вложенного ArrayList - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть два ArrayLists

private ArrayList<ArrayList<String> dataList = new ArrayList<>();
//This is a class variable

ArrayList<String> dataRow = new ArrayList<>();
//This is a method variable

Я добавляю элементы в dataRow

dataRow.add("number");
dataRow.add("firstName");
dataRow.add("surname");
dataRow.add("dateStart");
dataRow.add("dateEnd");

, а затем добавляю каждый dataRow в dataList, в результате чего получается ArrayList ArrayLists

dataList.add(dataRow);

Мой вопрос:

Мне нужно выбрать только элементы 3 и 4 из каждой строки данных, и я не могу найти работающий код.

Я пытался

for (ArrayList<String> eachRow : dataList)
{
    For (String eachElement : eachRow)
    (
        System.out.println(eachElement)
    }
}

Все, что это делает, это распечатывает все элементы

Я также пробовал другой код, такой как

dataList.get(eachElement)

, это выдает ошибку подходящего метода в netbeans

Ответы [ 3 ]

0 голосов
/ 03 апреля 2020

Предполагая, что вы хотите извлечь только два элемента массива, вы можете использовать для этого простой POJO:

class YourPojo { // rename it to something self-explanatory
  private String field3;
  private String field4;   
  // getters & setters
}

Затем определите служебный метод, извлекающий данные в ваш POJO из необработанного массива:

static YourPojo extractYourPojo(List<String> rawData){
    YourPojo pojo = new YourPojo();
    pojo.setField3(rawData.get(3));
    pojo.setField4(rawData.get(4));
    return pojo;
} 

Тогда вы можете использовать метод следующим образом:

List<YourPojo> extracted = 
    dataList.stream()
            .map(ClassWithUtilityMethod::extractYourPojo)
            .collect(toList());
0 голосов
/ 04 апреля 2020

Вы можете иметь класс для хранения значений, как показано ниже,

class ExtractedValue {

  private String value3;
  private String value4;

  public ExtractedValue(String value3, String value4) {
    this.value3 = value3;
    this.value4 = value4;
  }

  public String getValue3() {
    return value3;
  }

  public String getValue4() {
    return value4;
  }
}

и использовать приведенные ниже для извлечения 3-го и 4-го значений,

List<ExtractedValue> extracted= dataList.stream().map(l -> new ExtractedValue(l.get(3), l.get(4)))
            .collect(Collectors.toList());

. Для печати вы можете использовать ниже,

extracted.stream().forEach(e -> {
        System.out.println(e.getValue3());
        System.out.println(e.getValue4());
    });
0 голосов
/ 03 апреля 2020

Я понял это, как только опубликовал это.

Код для внутреннего l oop должен быть:

System.out.println(eachRow.get(4));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...