如何使用java从arrylist的arraylist中的arraylist中获取第一个和最后一个值

时间:2014-05-12 06:23:52

标签: java arraylist

如何从arrylist的arraylist中的arraylist中获取第一个和最后一个值,并检查java中其他arraylist值的相邻值?

例如:

这是我的arraylist

的arraylist
[[1,0],[2,0],[3,3],[1,0,0]]

这种arraylist大小可以是任何不合理的东西,这个arraylist的价值观会有所不同。

我需要的是[1,0]这个值应该取第一个值和最后一个值,需要检查arraylist的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 个答案:

答案 0 :(得分:2)

无需将列表转换为字符串。

List类允许通过索引检索对象。因此,请记住,基于Java的List中的索引是0,您可以这样做:

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

当然,您可以将这些与int的循环结合起来,循环遍历特定列表的所有索引,然后进行比较。

我已经编写了一个程序来执行您正在寻找的内容并将其放置here。我还尝试解释我在每个阶段所做的事情,因为如果你是Java的新手,它可能会使用你不熟悉的东西。

编辑:最终解决方案

OP在评论中透露,列表中的元素必须是字符串而不是整数,因为正在处理的项目可能包含字母。

还透露,我制作的解决方案有几个问题。当使用输入[[1,0],[2,0],[3,3],[1,0,0],[2,0],[2,0,0],[0,0],[1,2]]对其进行测试时,很明显在打印期间分配的组编号存在问题,给出了NullPointerExceptions。此外,由于列表的并发修改,存在一些列表无法正确分组的问题。

修正了上述问题后,我制作了this version of my code,完全解决了这个问题。

答案 1 :(得分:0)

好吧,关于其余部分的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

希望这有助于至少^ - ^

编辑:同样向数组列表添加数组的方式相同:

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