我将获得一个本质上是动态的来源清单。某些过程将不断向该源列表添加记录。我想将此列表中的记录作为10个条目的批处理。处理完条目后,将从源列表中清除该条目,以便我不再对其进行处理,并确保列表不会增加。
我也不想长时间阻塞源列表以添加记录(例如,我们在同步块中执行了某些操作)。有人可以帮助您有效解决此问题吗?
我计划使用番石榴列表分区来批量获取记录,但是我不知道这是否适用于连续变化的列表。
我将获得一个本质上是动态的来源清单。某些过程将不断向该源列表添加记录。我想将此列表中的记录作为10个条目的批处理。处理完条目后,将从源列表中清除该条目,以便我不再对其进行处理,并确保列表不会增加。
我也不想长时间阻塞源列表以添加记录(例如,我们在同步块中执行了某些操作)。有人可以帮助您有效解决此问题吗?
我计划使用番石榴列表分区来批量获取记录,但是我不知道这是否适用于连续变化的列表。
以下是对列表进行分区并处理大小为10的元素的简单示例。 在10个元素之后,它将清除列表,您可以再次在同一列表中填充新元素。 在批处理过程中,您可以使用此代码在列表元素达到特定大小后清除记录。
public static void main(String arg[]) {
ArrayList<Integer> arrList = null;
Scanner scan = null;
char choice = 'n';
try {
arrList = new ArrayList<Integer>(10);
scan = new Scanner(System.in);
do {
System.out.println("Enter 10 element and add in ArrayList");
for (int i = 0; i < 10; i++) {
System.out.print("Enter element [" +i+"] :: ");
int number = scan.nextInt();
arrList.add(number);
}
for (Integer number : arrList) {
System.out.println("Elements in list = " + number);
}
int retval = arrList.size();
if (retval == 10) {
arrList.clear();
}
System.out.println("Performing clear operation !!");
System.out.println("Do you want to continue !!");
String next = scan.next();
choice = next.charAt(0);
} while ((choice == 'y') || (choice == 'Y'));
} catch (Exception ex) {
ex.printStackTrace();
} finally {
scan.close();
System.out.println("Exit !!");
}
}
输出:
Enter 10 element and add in ArrayList
Enter element [0] :: 1
Enter element [1] :: 2
Enter element [2] :: 3
Enter element [3] :: 4
Enter element [4] :: 5
Enter element [5] :: 6
Enter element [6] :: 7
Enter element [7] :: 8
Enter element [8] :: 9
Enter element [9] :: 10
Elements in list = 1
Elements in list = 2
Elements in list = 3
Elements in list = 4
Elements in list = 5
Elements in list = 6
Elements in list = 7
Elements in list = 8
Elements in list = 9
Elements in list = 10
Performing clear operation !!
Do you want to continue !!
N
Exit !!
您可以根据需要更改此代码。
希望这个示例对您有所帮助。