自定义 Comparator.comparing 仅按 Java 中的字段 8
Custom Comparator.comparing only by field in Java 8
我想在 Java 8 中使用 Comparator.comparing(....) 实现一个比较器来仅按字段进行比较。
我想实现的功能如下:
List<DocumentLink> documentList = documentLinkService.getDocumentList(baseInstance);
//call of custom comparator for DigitalFileCategory due to compare only by Name
documentList = documentList.stream()
.filter(doc -> category.comp(doc.getDigitalFileCategory()))
.collect(Collectors.toList());
所以我需要一个布尔返回值。
DigitalFileCategory 中的 Comp 方法:
public boolean comp(Object obj) {
return super.equals(obj) ||
(obj != null &&
getName() != null &&
getName().equals(((DigitalFileCategory) obj).getName()));
}
任何想法,我该怎么做?
当我尝试实现 Comparator.comparing 时,要求我将 getName 设为静态。
DigitalFileCategory.class
public class DigitalFileCategory extends _Base {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "iddigitalfilecategory", nullable = false)
private Integer iddigitalfilecategory;
@Column(name = "Name", length = 64)
private String name;
@Column(name = "Priority")
private Integer priority;
// getter && setter
}
您想创建比较器以从 DigitalFileCategory
.
中取出 name
属性
Comparator<DigitalFileCategory> categoryNameComparator =
Comparator.comparing((DigitalFileCategory arg) -> arg.getName());
然后你需要在使用它时遵守它的合同(0
根据这个比较器,return 为平等的实体编辑):
documentList = documentList.stream()
.filter(doc -> 0 == categoryNameComparator.compare(category, doc.getDigitalFileCategory()))
.collect(Collectors.toList());
然而,为什么这么复杂的解决方案,你不能简单地做简单的相等检查(假设 category
& doc.getDigitalFileCategory()
从不 return null
)?
documentList = documentList.stream()
.filter(doc -> Objects.equals(category.getName(), doc.getDigitalFileCategory().getName()))
.collect(Collectors.toList());
我想在 Java 8 中使用 Comparator.comparing(....) 实现一个比较器来仅按字段进行比较。
我想实现的功能如下:
List<DocumentLink> documentList = documentLinkService.getDocumentList(baseInstance);
//call of custom comparator for DigitalFileCategory due to compare only by Name
documentList = documentList.stream()
.filter(doc -> category.comp(doc.getDigitalFileCategory()))
.collect(Collectors.toList());
所以我需要一个布尔返回值。 DigitalFileCategory 中的 Comp 方法:
public boolean comp(Object obj) {
return super.equals(obj) ||
(obj != null &&
getName() != null &&
getName().equals(((DigitalFileCategory) obj).getName()));
}
任何想法,我该怎么做? 当我尝试实现 Comparator.comparing 时,要求我将 getName 设为静态。
DigitalFileCategory.class
public class DigitalFileCategory extends _Base {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "iddigitalfilecategory", nullable = false)
private Integer iddigitalfilecategory;
@Column(name = "Name", length = 64)
private String name;
@Column(name = "Priority")
private Integer priority;
// getter && setter
}
您想创建比较器以从 DigitalFileCategory
.
name
属性
Comparator<DigitalFileCategory> categoryNameComparator =
Comparator.comparing((DigitalFileCategory arg) -> arg.getName());
然后你需要在使用它时遵守它的合同(0
根据这个比较器,return 为平等的实体编辑):
documentList = documentList.stream()
.filter(doc -> 0 == categoryNameComparator.compare(category, doc.getDigitalFileCategory()))
.collect(Collectors.toList());
然而,为什么这么复杂的解决方案,你不能简单地做简单的相等检查(假设 category
& doc.getDigitalFileCategory()
从不 return null
)?
documentList = documentList.stream()
.filter(doc -> Objects.equals(category.getName(), doc.getDigitalFileCategory().getName()))
.collect(Collectors.toList());