请问java 结果集list<user>,根据user.name属性,如何再将结果集中的name属性相同的user放到一个新的list中?
user的name可能多个,不固定,根据name将user放到不同新的的list
请问java 结果集list<user>,根据user.name属性,如何再将结果集中的name属性相同的user放到一个新的list中?
user的name可能多个,不固定,根据name将user放到不同新的的list
直接写点代码了
`
public class MyTest {
class User{
String name;
int age;
public User(String name,int age) {
this.name = name;
this.age = age;
}
}
public static void main(String[] args) {
MyTest myTest = new MyTest();
List<User> users = new ArrayList<>();
User user1 = myTest.new User("zhangsan", 18);
User user2 = myTest.new User("lisi", 18);
User user3 = myTest.new User("wangwu", 18);
User user4 = myTest.new User("zhangsan", 19);
User user5 = myTest.new User("zhangsan", 20);
User user6 = myTest.new User("lisi", 19);
users.add(user1);
users.add(user2);
users.add(user3);
users.add(user4);
users.add(user5);
users.add(user6);
/*根据name将user放到不同新的的list*/
Map map = new HashMap<String,List<User>>();
for (User user : users){
//如果map中不存此name,则以此name为key
if(map.get(user.name) == null ){
List list = new ArrayList<User>();
list.add(user);
map.put(user.name,list);
}else{
List list = (List<User>) map.get(user.name);
list.add(user);
map.put(user.name,list);
}
}
List<User> zhangsans = (List<User>)map.get("zhangsan");
for (User user : zhangsans){
System.out.println(user.name+" : "+user.age);
}
System.out.println(map.get("zhangsan"));
}
}
`
使用 Map<String,List<User>>, name 作为key ,遍历原list 并且根据name 获取 对应的 list 把 user 添加进去,如果不存在就创建并保存到 Map 中。
手机码字不便… 将就着看吧…
java8
List<User> users = ...;
Map<String, List<User>> usersGroupByName = users.stream().collect(Collectors.groupingBy(User::getName));
guava
/**
* 根据函数 O->K和O->V 把 O[] 转化为 {K -> V[]}的Multimap
*/
public static <O, K, V> ArrayListMultimap<K, V> newMultimapWithValue(Collection<? extends O> coll, Function<O, K> objToKeyFunction, Function<O, V> objToValueFunction) {
// 可以根据需求把ArrayListMultimap换成HashMultimap或TreeMultimap
ArrayListMultimap<K, V> result = ArrayListMultimap.create();
if (coll == null || coll.isEmpty()) {
return result;
}
for (O obj : coll) {
K key = objToKeyFunction.apply(obj);
V value = objToValueFunction.apply(obj);
result.put(key, value);
}
return result;
}
List<User> users = ...;
ArrayListMultimap<String, User> usersGroupByName = newMultimapWithValue(users, User::getName, v -> v);
参考资料:
ifeve.com/google-guava/
4 回答1.2k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答701 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.6k 阅读
2 回答1.3k 阅读
拿来练习下RxJava