说我在我的arrayList中有一堆排序记录(多次排序),例如:
Country : USA , State : California , Users : 987
Country : USA , State : California , Users : 934
Country : USA , State : California , Users : 897
Country : USA , State : Florida , Users : 745
Country : USA , State : Florida , Users : 634
Country : USA , State : Texas , Users : 564
你可以看到上面的数据已经排序了我想在这个数据上添加一个标签(比如一个索引),这样它就像这样:
Country : USA , State : California , Users : 987 , addedTag : 1 // ranked by same country and state
Country : USA , State : California , Users : 934 , addedTag : 2 // ranked by same country and state
Country : USA , State : California , Users : 897 , addedTag : 3 // ranked by same country and state
Country : USA , State : Florida , Users : 745 , addedTag : 1 // rank from starting cause its a new state
Country : USA , State : Florida , Users : 634 , addedTag : 2
Country : USA , State : Texas , Users : 564 , addedTag : 1
任何人都知道我该怎么做?
答案 0 :(得分:1)
显然,所有这一切都需要迭代ArrayList并附加您想要的标签,其中增量计数的国家和州是相同的,但是重置国家和州不相同的计数。
下面是一个方便地命名为 addTag()的方法,它将执行此操作,如果您要处理数十万条记录,那么我建议在单独的线程或执行程序服务中运行代码。 / p>
注意:此方法将修改提供的ArrayList。如果你想保持原始的ArrayList,那么将克隆传递给 下面提供了addTag()方法。
以下是方法:
$
以下是可能使用它的方式:
private void addTag(ArrayList<String> array) {
int counter = 0;
String country = "";
String state = "";
for (int i = 0; i < array.size(); i++) {
// Split the ArrayList comma delimited string element.
String[] data = array.get(i).trim().split(",");
String cntry = data[0].toLowerCase(); //hold the country for this element
String stat = data[1].toLowerCase(); //hold the state for this element
// start our tag appending
if (i == 0) {
counter++;
country = cntry;
state = stat;
array.set(i, array.get(i) + " , addtag : " + String.valueOf(counter));
}
else {
// If we hit the same country and the same state again
// then increment our counter and append tag to element.
if (cntry.equalsIgnoreCase(country) && stat.equalsIgnoreCase(state)) {
counter++;
array.set(i, array.get(i) + " , addtag : " + String.valueOf(counter));
}
// If we don't hit the same country and the same state again
// then reset the counter to 1 and append tag to element.
else {
country = cntry;
state = stat;
counter = 1;
array.set(i, array.get(i) + " , addtag : " + String.valueOf(counter));
}
}
}
}
这是示例控制台输出:
// Example ArrayList...
ArrayList<String> users = new ArrayList<>();
users.add("Country : CANADA , State : Alberta , Users : 132");
users.add("Country : CANADA , State : BC , Users : 232");
users.add("Country : CANADA , State : BC , Users : 249");
users.add("Country : CANADA , State : Ontario , Users : 888");
users.add("Country : CANADA , State : Ontario , Users : 432");
users.add("Country : USA , State : California , Users : 987");
users.add("Country : USA , State : California , Users : 934");
users.add("Country : USA , State : California , Users : 897");
users.add("Country : USA , State : Florida , Users : 745");
users.add("Country : USA , State : Florida , Users : 634");
users.add("Country : USA , State : Texas , Users : 564");
// Before using the addtag() method...
for (int i = 0; i < users.size(); i++) {
System.out.println(users.get(i));
}
System.out.println("\n===================================="
+ "==========================\n");
// The supplied ArrayList MUST be sorted
// before passing it to this method.
addTag(users);
// After using the addtag() method...
for (int i = 0; i < users.size(); i++) {
System.out.println(users.get(i));
}