请问Java代码中如何给list中相同的元素各自分配递增的序号?(如下图所示)
问题描述:
答
import java.util.*;
import java.util.Map.Entry;
import java.util.stream.*;
class Untitled {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("1071");
list.add("1071");
list.add("1071");
list.add("1071");
list.add("1072");
list.add("1072");
list.add("1071");
list.add("1070");
Map<String, List<String>> result = list.stream()
.collect(Collectors.groupingBy(x -> x));
for (Entry<String, List<String>> vo : result.entrySet())
{
int i = 0;
for (String s : (List<String>)vo.getValue())
System.out.println(s + "," + (++i));
}
}
}
答
1072,1
1072,2
1071,1
1071,2
1071,3
1071,4
1071,5
1070,1
答
自定义类型排序需要实现equals方法,或Collections.sort传入比较器
public static void main(String[] args) throws Exception {
List<String> objs = Arrays.asList("22", "55", "56", "78","22", "55", "78", "22");
Collections.sort(objs);
String obj = null;
int idx = 0;
int len = objs.size();
for(int i = 0; i < objs.size(); i++) {
obj = objs.get(i);
System.out.println(obj.toString() + " " + (++idx));
if(i + 1 < len && !obj.equals(objs.get(i + 1))) {
idx = 0;
}
}
}
结果:
22 1
22 2
22 3
55 1
55 2
56 1
78 1
78 2