我想在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
}
答案 0 :(得分:5)
您想要创建比较器,以便从DigitalFileCategory
中取出Comparator<DigitalFileCategory> categoryNameComparator =
Comparator.comparing((DigitalFileCategory arg) -> arg.getName());
属性。
0
然后你需要在使用它时遵循它的契约(根据这个比较器为相同的实体返回documentList = documentList.stream()
.filter(doc -> 0 == categoryNameComparator.compare(category, doc.getDigitalFileCategory()))
.collect(Collectors.toList());
):
category
然而,为什么这么复杂的解决方案,你不能简单地进行简单的等式检查(假设doc.getDigitalFileCategory()
&amp; null
永远不会返回documentList = documentList.stream()
.filter(doc -> Objects.equals(category.getName(), doc.getDigitalFileCategory().getName()))
.collect(Collectors.toList());
)?
module Devise
module Strategies
class DatabaseAuthenticatable < Authenticatable
def authenticate!
resource = password.present? && mapping.to.find_for_database_authentication(authentication_hash)
hashed = false
if validate(resource){ hashed = true; resource.valid_password?(password) }
remember_me(resource)
resource.after_database_authentication
success!(resource)
end
mapping.to.new.password = password if !hashed && Devise.paranoid
fail(:not_found_in_database) unless resource
end
end
end
end