如何获取java.util.Set的填充字段<;对象>;或者如果字段为空,则返回其他内容?

如何获取java.util.Set的填充字段<;对象>;或者如果字段为空,则返回其他内容?,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个Addresses类,用于Customer类的两个属性中,第一个属性是一个简单的对象,用于表示客户的默认地址,另一个属性是客户可以拥有的一组地址 我需要将postalCode字段发送到另一个类。我想在集合中签入是否有已填充的postalCode,如果是,则发送此值,否则(如果集合中没有已填充的postalCode),则我应该从默认地址发送postalCode值。如何做到这一点?我以前试过这种方法: Optional.ofNullable(Stream.of(product.getCust

我有一个Addresses类,用于Customer类的两个属性中,第一个属性是一个简单的对象,用于表示客户的默认地址,另一个属性是客户可以拥有的一组地址

我需要将postalCode字段发送到另一个类。我想在集合中签入是否有已填充的postalCode,如果是,则发送此值,否则(如果集合中没有已填充的postalCode),则我应该从默认地址发送postalCode值。如何做到这一点?我以前试过这种方法:

Optional.ofNullable(Stream.of(product.getCustomer().getAddresses()).forEach
(i -> i.getPostalCode())).orElse(product.getCustomer().getAddressDefault().getPostalCode()))
我的课程如下:

public class Customer {

    private Addresses addressDefault;

    private Set<Addresses> addresses;
}

public class Addresses {

    private String postalCode;

    private String city;

    private String state;

    private String country;

}
公共类客户{
私人地址地址默认;
专用地址集;
}
公共类地址{
专用字符串后代码;
私人城市;
私有字符串状态;
私人国家;
}

使用Java 8 streams,您可以使用
映射
将地址转换为其
后代码
,使用
过滤器
删除
空值
值,并使用
findFirst
获取第一个非空后代码

Stream.findFirst
通过返回可选值来处理空流。要获取其值或默认值,请使用
Optional.orElse
方法

代码:

String postalCode = customer.addresses.stream()
        .map(addresses -> addresses.postalCode)
        .filter(Objects::nonNull)
        .findFirst()
        .orElse(customer.addressDefault.postalCode);

这一要求毫无意义。不同地址的邮政编码可能都不同。你可能发错了邮政编码。