将排序后的ArrayList内容添加到同类型ArrayList时报错如何解决
报错原因
List.sort()是原地排序方法,会直接修改调用该方法的列表本身,返回值为void。你尝试把sort()的返回值传入add()/addAll()作为参数,就会出现参数类型不匹配的报错。
实现方案
方案1:允许修改原clientList的顺序
先完成原列表的排序,再将排序后的内容复制到目标列表即可:
// 对原clientList做原地排序 clientList.sort(Comparator.comparing(Client::getScore)); // 将排序后的所有元素复制到sortedClientList,得到独立的列表对象 sortedClientList.addAll(clientList);
执行完成后,修改sortedClientList的列表结构(新增、删除元素)不会影响原clientList。
方案2:保留原clientList的原有顺序
如果不需要修改原列表的排序,直接对目标副本排序即可:
// 先复制原列表的所有元素到sortedClientList sortedClientList.addAll(clientList); // 单独对副本排序,完全不影响原列表的顺序 sortedClientList.sort(Comparator.comparing(Client::getScore));
如果需要做到元素级完全独立(修改Client对象的属性不会同时影响两个列表),复制元素时需要对每个Client对象单独做深拷贝处理。
内容的提问来源于stack exchange,提问作者Mantas
相关产品推荐
相关产品推荐

