Как взять первое и последнее значение из arraylist внутри arraylist arrylist с помощью java
Как взять первое и последнее значение из arraylist внутри arraylist arrylist и проверить соседние значения других значений arraylist в java?
Например:
Это мой arraylist из arraylist
[[1,0],[2,0],[3,3],[1,0,0]]
Этот размер arraylist может быть любой вещью, не согласующейся, и значения в этом arraylist будут варьироваться.
То, что мне нужно здесь, это [1,0] из этого значения он должен взять первое значение и последнее значение и нужно проверить со всеми другими значениями из коллекции коллекции ArrayList. Если соседние значения одинаковы, то он должен хранить в другом месте и нужно отобразить его.
Мне нужен такой вывод:
group :0
1,0
1,0,0
group:1
2,0
group:3
3,3
Если первое и последнее значения одинаковы, то он должен перейти в одну группу и остаться в другой группе, и ему нужно отобразить все значения.
Это код, который я пробовал, но я очень новичок в java. так что мой код не настолько хорош .пожалуйста, помогите мне найти этот выход.
for (int a = 0; a < pattrn.size(); a++) {
// System.out.println(pat.size());
first = pattrn.get(a);
break;
}
System.out.println(first);
String temp = first.toString().replace("[", "").replace("]", "");
System.out.println(temp);
StringTokenizer firstvar = new StringTokenizer(temp, ", ");
firstvalue = firstvar.nextToken();
System.out.println("first value.." + firstvalue);
while (firstvar.hasMoreTokens()) {
lastvalue = firstvar.nextToken();
System.out.println("last value.." + lastvalue);
}
Используя этот код, я не могу найти этот выход.
2 ответов:
Нет необходимости преобразовывать ваши списки в строки.
Класс List позволяет извлекать объекты с помощью индексов. Таким образом, имея в виду, что индексы основаны на 0 для списка в Java, вы можете сделать это:
Затем, чтобы получить последнее значение в списке, можно использовать методList<List<Integer>> collection = new ArrayList<List<Integer>>(); //Some initialization to get to this: [[1,0],[2,0],[3,3],[1,0,0]] //The [1,0] list can be retrieved by the index 0 List<Integer> list = collection.get(0); //Then you can do the same thing on that list to get the first value Integer integer = list.get(0); //This will be 1size(). Это возвращает размер списка. Так что в вашем случае это 4. Но помните, что индексы начинаются с 0, поэтому, чтобы получить последний элемент в списке, вы используетеsize() - 1в качестве индекса.//Then the following line will give you the last List of [1,0,0] List<Integer> list = collection.get( collection.size() - 1 ); //Then you can do the same thing on that list to get the last value //The size here will be 3 of course as this is the [1,0,0] list Integer integer = list.get( list.size() - 1 ); //This will be 0Конечно, вы можете объедините их с циклами
Я написал программу, которая делает то, что вы ищете, и поместил ее здесь. Я также попытался объяснить, что я делаю на каждом этапе, поскольку это может использовать вещи, с которыми вы не знакомы, если вы новичок в Java.ints, чтобы зациклить все индексы определенного списка, а затем выполнить сравнения.Edit: Окончательное Решение
ОП показал в комментариях, что элементы в списках должны быть строками, а не Целые числа в качестве обрабатываемых элементов могут содержать буквы.
Также выяснилось, что решение, которое я создал, имело несколько проблем. При тестировании его с помощью ввода
[[1,0],[2,0],[3,3],[1,0,0],[2,0],[2,0,0],[0,0],[1,2]]стало очевидно, что есть проблемы вокруг групповых номеров, которые присваиваются, давая NullPointerExceptions во время печати. Кроме того, существует проблема, когда некоторые списки не будут сгруппированы надлежащим образом из-за одновременного изменения списков.Исправив вышеперечисленные проблемы, я создал эту версию мой код , который полностью решил эту проблему.
Ну, idk об остальном, но это то, как вы получаете первый и последний из каждой части массива.
public static int[][] myArray = { { 1, 2, 3 }, { 1, 2, 3, 4 }, { 1, 2, 3, 4, 5 }, { 1, 2, 3, 4 }, { 1, 2, 3 }, { 1, 2, 3, 4, 5 }, { 1, 2, 3, 4 }, { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, { 1, 2, 3, 4, 5, 6, 7 }, };Довольно просто получить первый и последний, просто выполните цикл по массиву следующим образом:
public static void main(String[] args) { for (int i = 0; i < myArray.length; i++) { int first = myArray[i][0]; // first value int last = myArray[i][myArray[i].length - 1]; // last System.out.println("["+i+"]First: "+first+", Last: "+last+""); } }Вывод будет следующим:
[0]First: 1, Last: 3 [1]First: 1, Last: 4 [2]First: 1, Last: 5 [3]First: 1, Last: 4 [4]First: 1, Last: 3 [5]First: 1, Last: 5 [6]First: 1, Last: 4 [7]First: 1, Last: 10 [8]First: 1, Last: 10Надеюсь, это помогло хотя бы некоторым ^ - ^
EDIT: также добавление массива в список массивов работает аналогичным образом:
public static ArrayList<int[]> myList = new ArrayList<int[]>(); static { myList.add(new int[] { 1, 2 }); myList.add(new int[] { 1, 2, 3 }); myList.add(new int[] { 1, 2, 3, 4 }); myList.add(new int[] { 1, 2, 3, 4, 5 }); myList.add(new int[] { 1, 2, 3, 4, 5, 6 }); myList.add(new int[] { 1, 2, 3, 4, 5, 6, 7 }); myList.add(new int[] { 1, 2, 3, 4, 5, 6, 7, 8 }); myList.add(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9}); myList.add(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); } public static void main(String[] args) { for (int i = 0; i < myList.size(); i++) { int first = myList.get(i)[0]; // first value int last = myList.get(i)[myList.get(i).length - 1]; // last System.out.println("["+i+"] First: "+first+", Last: "+last+""); } }Вывод:
[0]First: 1, Last: 2 [1]First: 1, Last: 3 [2]First: 1, Last: 4 [3]First: 1, Last: 5 [4]First: 1, Last: 6 [5]First: 1, Last: 7 [6]First: 1, Last: 8 [7]First: 1, Last: 9 [8]First: 1, Last: 10
Comments