Как взять первое и последнее значение из 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);
}


Используя этот код, я не могу найти этот выход.

602   2  

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 1
Затем, чтобы получить последнее значение в списке, можно использовать метод size(). Это возвращает размер списка. Так что в вашем случае это 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

Конечно, вы можете объедините их с циклами ints, чтобы зациклить все индексы определенного списка, а затем выполнить сравнения.

Я написал программу, которая делает то, что вы ищете, и поместил ее здесь. Я также попытался объяснить, что я делаю на каждом этапе, поскольку это может использовать вещи, с которыми вы не знакомы, если вы новичок в Java.

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

    Ничего не найдено.