62,614
社区成员
发帖
与我相关
我的任务
分享
int size = list.size();
for(int i = 0;i < size;i++) {
if(i+1 < list.size()) {
User firstUser = list.get(i);
User lastUser = list.get(i+1);
if(firstUser.getUserId() == lastUser.getUserId()) {
firstUser.setName(firstUser.getName()+lastUser.getName());
list.set(i, firstUser);
list.remove(i+1);
}
} else break;
}
这样的话,这个算法有点像冒泡排序,不过你的程序我觉得有2个问题
1、因为有相同id的时候,会删除元素,这样列表的size会变化,所以在循环中固定size不合适,应该是动态的
2、if(i+1 < list.size()) 可以省略,想象一下,即使都是不同的id,两两比较,只要比较list.size() -1次,所以下标从0开始,循环到list.size() -2就够了,下标不会越界
for(int i = 0;i < list.size() - 1;i++){
User firstUser = list.get(i);
User lastUser = list.get(i+1);
if(firstUser.getUserId() == lastUser.getUserId()) {
firstUser.setName(firstUser.getName()+lastUser.getName());
list.set(i, firstUser);
list.remove(i+1);
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class TestDemo1 {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User(1,"a",20));
list.add(new User(1,"a",20));
list.add(new User(2,"a",20));
list.add(new User(3,"b",20));
list.add(new User(1,"c",20));
list.add(new User(4,"d",20));
list.add(new User(2,"e",20));
list.add(new User(1,"a",20));
list = mySort(list);
for (User user : list) {
System.out.println(user.toString());
}
}
public static List<User> mySort(List<User> list){
HashMap<Integer,User> tempMap = new HashMap<>();
for (User user : list) {
int key = user.getId();
if(tempMap.containsKey(key)){
User tempUser = new User(key,tempMap.get(key).getName() + user.getName(),tempMap.get(key).getAge());
tempMap.put(key, tempUser);
}else{
tempMap.put(key, user);
}
}
List<User> tempList = new ArrayList<>();
for(int key : tempMap.keySet()){
tempList.add(tempMap.get(key));
}
return tempList;
}
}
class User{
private int id;
private String name;
private int age;
public User(){}
public User(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
int size = list.size();
for(int i = 0;i < size;i++) {
if(i+1 < list.size()) {
User firstUser = list.get(i);
User lastUser = list.get(i+1);
if(firstUser.getUserId() == lastUser.getUserId()) {
firstUser.setName(firstUser.getName()+lastUser.getName());
list.set(i, firstUser);
list.remove(i+1);
}
} else break;
}
不知道有没有什么漏洞。。。还是感谢你提供的思路,受教了!