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

我有电话号码列表,我需要根据电话类型进行过滤。最终结果应该是单个对象 (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();

请帮我写下逻辑。提前致谢。如果您需要更多详细信息,请告诉我。


慕妹3146593
浏览 193回答 2
2回答

隔江千里

不要按类型使用filter、使用min或排序。max像下面这样的东西:enum PhoneType {&nbsp; &nbsp; CELL, WORK, HOME; // in order of preference}class Phone {&nbsp; &nbsp; public PhoneType getType() ...&nbsp; &nbsp; public String getNumber() ...}Phone best = Collections.min(phoneList, Comparator.comparing(Phone::getType));

梵蒂冈之花

更好地使用最小和最大排序类型enum PhoneType {&nbsp; &nbsp; Mobile, Office, personal; // in order of preference}class Mobile {&nbsp; &nbsp; public PhoneType getType()&nbsp;&nbsp; &nbsp; public String getNumber()&nbsp;}Comparator<Mobile> preferredNumber = Comparator.comparing(Mobile::getType);Mobile best = mobileList.stream().min(preferredNumber).orElseThrow();希望你能明白。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java