Java 8:从可空的名字和姓氏构建首字母

时间:2015-04-20 20:14:39

标签: java

寻找更好的方法或现有的库,它将允许更优雅的方式构建首字母。我目前得到的东西似乎有点笨拙:

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;

3 个答案:

答案 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吗?它没有fromNullableor方法 - 而是使用ofNullableorElse方法。

使用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);
  }

}