如何从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);
}
使用此代码我无法找到此输出。
答案 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