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

Java 8 Stream()具有复杂的列表条件,它应该返回一个结果,java,filter,collections,java-8,java-stream,Java,Filter,Collections,Java 8,Java Stream,我有电话号码列表,需要根据电话类型进行筛选。最终结果应该是单个对象(PhoneUsageType)。 示例场景 1.如果列表中有两种不同类型的电话号码,如手机和家庭电话,那么它应该只返回我的手机对象。 2.如果它只有手机,那么它应该直接将该对象返回给我 3.如果它有,它没有手机,那么它应该把我家的手机还给我 如果列表中有手机,则手机应为首选对象 使用list.stream().filter 代码 PhoneUsageType phone1=新的PhoneUsageType(); PhoneUsa

我有电话号码列表,需要根据电话类型进行筛选。最终结果应该是单个对象(PhoneUsageType)。 示例场景 1.如果列表中有两种不同类型的电话号码,如手机和家庭电话,那么它应该只返回我的手机对象。 2.如果它只有手机,那么它应该直接将该对象返回给我 3.如果它有,它没有手机,那么它应该把我家的手机还给我

如果列表中有手机,则手机应为首选对象

使用list.stream().filter

代码

PhoneUsageType phone1=新的PhoneUsageType();
PhoneUsageKeyGrpType keyGroup1=新的PhoneUsageKeyGrpType();
按键组1.setPurposeCode(“手机”);
phone1.setPhoneUsageKeyGrp(keyGroup1);
PhoneNumberType phoneNumber1=新的PhoneNumberType();
电话号码1.setFullNumber(“123”);
电话1.设置电话号码(电话号码1);
PhoneUsageType phone2=新的PhoneUsageType();
PhoneUsageKeyGrpType keyGroup2=新的PhoneUsageKeyGrpType();
按键组2.setPurposeCode(“手机”);
phone2.setPhoneUsageKeyGrp(keyGroup2);
PhoneNumberType phoneNumber2=新的PhoneNumberType();
电话号码2.setFullNumber(“456”);
phone2.设置PhoneNumber(phoneNumber2);
List phoneUsageList=Lists.newArrayList();

请帮我写逻辑。提前谢谢。如果你需要更多的细节,请告诉我

不要使用
过滤器
,使用
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));

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

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();
枚举电话类型{
移动、办公室、个人;//按优先顺序排列
}
阶级流动{
公共电话类型getType()
公共字符串getNumber()
}
Comparator preferredNumber=Comparator.comparing(Mobile::getType);
mobilebest=mobileList.stream().min(preferredNumber.orelsetrow();

希望你得到它

如果您没有提到预期的输出或您已经进行的尝试,您应该在问题中包括PhoneUsageType类。或者
Phone best=Collections.min(phoneList,preferredNumber)
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();