请问用什么方法能获取以下的输出结果

实体类user : String userName , String from

List list=new ArrayList<>();
user vo =new user();
user vo1 =new user();
user vo2 =new user();
user vo3 =new user();
vo.setUserName("张三");
vo.setUserFrom("上海");
vo1.setUserName("李四");
vo1.setUserFrom("上海");
vo2.setUserName("王五");
vo2.setUserFrom("北京");
vo3.setUserName("赵六");
vo3setUserFrom("北京");
list.add(vo);
list.add(vo1);
list.add(vo2);
list.add(vo3);

输出结果: 上海: 张三 ,李四
北京: 王五,赵六


import java.util.*;
public class TestDemo {
    

    public static void main(String[] args) {
        List<user> list=new ArrayList<>();
        user vo =new user();
        user vo1 =new user();
        user vo2 =new user();
        user vo3 =new user();
        vo.setUserName("张三");
        vo.setUserFrom("上海");
        vo1.setUserName("李四");
        vo1.setUserFrom("上海");
        vo2.setUserName("王五");
        vo2.setUserFrom("北京");
        vo3.setUserName("赵六");
        vo3.setUserFrom("北京");
        list.add(vo);
        list.add(vo1);
        list.add(vo2);
        list.add(vo3);
        Map<String,List<String>> map = new HashMap<>();
        for(user u : list){
            if(map.containsKey(u.getUserFrom())){
                map.get(u.getUserFrom()).add(u.getUserName());
            } else {
                List<String> userNames= new ArrayList<>();
                userNames.add(u.getUserName());
                map.put(u.getUserFrom(),userNames);
            }
        }
        for(Map.Entry<String,List<String>> entry : map.entrySet()){
            System.out.print(entry.getKey() + ":");
            StringJoiner joiner = new StringJoiner(",");
            for(String userName : entry.getValue()){
                joiner.add(userName);
            }
            System.out.println(joiner.toString());
        }
    }
}

用个循环放进hashmap里就好了