java - 将值从 HashMap 复制到 TreeMap
问题描述
我想将 HashMap 中的值复制到 TreeMap 以根据对象的键获取排序后的映射。
这是我的代码:
private static Map<Product,String> sortingUsingTreeMap(Map<Product,String> descriptionByProducts){
final Map<Product,String> sortedMap = new TreeMap<Product,String>();
for(Map.Entry<Product, String> element:descriptionByProducts.entrySet()) {
sortedMap.put(element.getKey(), element.getValue());
}
sortedMap.putAll(descriptionByProducts);
return sortedMap;
}
我收到此错误:
Exception in thread "main" java.lang.ClassCastException: compare.Product cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1294)
at java.util.TreeMap.put(TreeMap.java:538)
这是我的“产品”模型类。地图中的键是一个产品对象。
public class Product {
private String prodId;
private String prodName;
public String getProdId() {
return prodId;
}
@Override
public String toString() {
return "Product [prodId=" + prodId + ", prodName=" + prodName + "]";
}
public Product(String prodId, String prodName) {
super();
this.prodId = prodId;
this.prodName = prodName;
}
public void setProdId(String prodId) {
this.prodId = prodId;
}
public String getProdName() {
return prodName;
}
public void setProdName(String prodName) {
this.prodName = prodName;
}
}
查看了各种答案并制作了一个自定义比较器:
import java.util.Comparator;
public class ProductComparator implements Comparator<Product>{
public ProductComparator() {
}
@Override
public int compare(Product o1, Product o2) {
return o1.getProdId().compareTo(o2.getProdId());
}
}
如何解决此错误?提前致谢。
解决方案
感谢@AlexITC 解决此问题。我更新了方法:
private static Map<Product,String> sortingUsingTreeMap(Map<Product,String> descriptionByProducts){
final Map<Product,String> sortedMap = new TreeMap<Product,String>(new ProductComparator());
for(Map.Entry<Product, String> element:descriptionByProducts.entrySet()) {
sortedMap.put(element.getKey(), element.getValue());
}
sortedMap.putAll(descriptionByProducts);
return sortedMap;
}
推荐阅读
- python - 如何返回 python 日期时间格式字符串?
- html - Bootstrap 中的多级下拉菜单
- scala - 可以解决类型类证据参数和具体实例参数之间的类型冲突吗?
- php - COM 在 IIS PHP 版本 7.2.9 中不起作用
- angular - 具有多个日期选择的 Angular 6 日历
- server - Jupyter 服务器可从外部访问但拒绝本地主机连接
- android - 如何从 Presenter 访问 Fragment Manager(或 Hosting Activity)
- python - Jinja2检查字典列表中是否存在值
- amazon-web-services - AWS Kubernetes 暴露服务超时错误
- spring - 如何在spring boot中将数据填充到表onclick按钮中?