为了账号安全,请及时绑定邮箱和手机立即绑定

Java 8 Stream() 具有复杂的 List 条件,它应该返回一个结果

Java 8 Stream() 具有复杂的 List 条件,它应该返回一个结果

慕妹3146593 2023-02-23 15:42:30
我有电话号码列表,我需要根据电话类型进行过滤。最终结果应该是单个对象 (PhoneUsageType)。示例场景 1. 如果列表有 2 种不同类型的电话号码,如 Cell_Phone 和 Home_Phone,它应该只返回 Cell_Phone 对象。2.如果它只有 Cell_Phone 那么它应该直接返回我那个对象 3.如果它没有 Cell_Phone 那么它应该返回我 Home_Phone如果 Cell_Phone 在列表中可用,则它应该是首选对象使用list.stream().filter代码PhoneUsageType phone1 = new PhoneUsageType();PhoneUsageKeyGrpType keyGroup1 = new PhoneUsageKeyGrpType();keyGroup1.setPurposeCode("CELL_PHONE");phone1.setPhoneUsageKeyGrp(keyGroup1);PhoneNumberType phoneNumber1 = new PhoneNumberType();phoneNumber1.setFullNumber("123");phone1.setPhoneNumber(phoneNumber1);PhoneUsageType phone2 = new PhoneUsageType();PhoneUsageKeyGrpType keyGroup2 = new PhoneUsageKeyGrpType();keyGroup2.setPurposeCode("CELL_PHONE");phone2.setPhoneUsageKeyGrp(keyGroup2);PhoneNumberType phoneNumber2 = new PhoneNumberType();phoneNumber2.setFullNumber("456");phone2.setPhoneNumber(phoneNumber2);List<PhoneUsageType> phoneUsageList = Lists.newArrayList();请帮我写下逻辑。提前致谢。如果您需要更多详细信息,请告诉我。
查看完整描述

2 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

不要按类型使用filter、使用min或排序。max


像下面这样的东西:


enum PhoneType {

    CELL, WORK, HOME; // in order of preference

}


class Phone {

    public PhoneType getType() ...

    public String getNumber() ...

}


Phone best = Collections.min(phoneList, Comparator.comparing(Phone::getType));


查看完整回答
反对 回复 2023-02-23
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

更好地使用最小和最大排序类型


enum PhoneType {

    Mobile, Office, personal; // in order of preference

}


class Mobile {

    public PhoneType getType() 

    public String getNumber() 

}


Comparator<Mobile> preferredNumber = Comparator.comparing(Mobile::getType);


Mobile best = mobileList.stream().min(preferredNumber).orElseThrow();

希望你能明白。


查看完整回答
反对 回复 2023-02-23
  • 2 回答
  • 0 关注
  • 190 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信