寻找更好的方法或现有的库,它将允许更优雅的方式构建首字母。我目前得到的东西似乎有点笨拙:
String first = Optional.ofNullable(person.getFirstName()).orElse("");
first = first.isEmpty() ? first : first.substring(0, 1);
String last = Optional.ofNullable(person.getLastName()).orElse("");
last = last.isEmpty() ? last : last.substring(0, 1);
return first + last;
答案 0 :(得分:6)
// extract common code to method to avoid duplication
private String getInitial(String s) {
return (s != null && !s.isEmpty()) ? s.substring(0, 1) : "";
}
private String getInitials(Person person) {
return getInitial(person.getFirstName()) + getInitial(person.getLastName());
}
答案 1 :(得分:2)
您可以使用map
:
String first = Optional.ofNullable(person.getFirstName())
.map(s -> s.substring(0, 1)).orElse("");
(您使用的是Java 8的Optional
吗?它没有fromNullable
和or
方法 - 而是使用ofNullable
和orElse
方法。
使用Google Guava的Optional
代替Java 8:
String first = Optional.fromNullable(person.getFirstName())
.transform(s -> s.substring(0, 1)).or("");
答案 2 :(得分:1)
final class NameUtils
{
static String initials(Person p)
{
Stream<String> s = Stream.of(p.getFirstName(), p.getLastName());
return s.filter(NameUtils::isValid).map(x -> x.substring(0, 1)).collect(Collectors.joining());
}
private static boolean isValid(String s)
{
return (s != null) && (s.length() > 0);
}
}