如果所有条件都在谓词中给出,则获取所有匹配的非空元素
get all matching non null elements if all the conditions are given in predicate
如何获取id = 2的所有元素?
下面的代码只给出了最后一个,即 channelMetadataDetail3
:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class APICheck {
public static void main(String[] args) {
List<ChannelMetadataDetails> channelMetadataDetails =
new ArrayList<ChannelMetadataDetails>();
ChannelMetadataDetails channelMetadataDetail1 =
new ChannelMetadataDetails();
channelMetadataDetail1.setId("2");
channelMetadataDetail1.setUnitOfMeasureId("3");
ChannelMetadataDetails channelMetadataDetail2 =
new ChannelMetadataDetails();
channelMetadataDetail2.setId("2");
channelMetadataDetail2.setUnitOfMeasureId("3");
channelMetadataDetail2.setMeasureTypeId("5");
ChannelMetadataDetails channelMetadataDetail3 =
new ChannelMetadataDetails();
channelMetadataDetail3.setId("2");
channelMetadataDetails.add(channelMetadataDetail1);
channelMetadataDetails.add(channelMetadataDetail2);
channelMetadataDetails.add(channelMetadataDetail3);
channelMetadataDetails =channelMetadataDetails.
stream().filter(cm -> cm.getId().equals("2")).
filter(cm -> cm.getUnitOfMeasureId().equals(null)).
filter(cm -> cm.getMeasureTypeId().equals(null)).
collect(Collectors.toList());
}
}
注意:- 如果 cm.getUnitOfMeasureId()
为空,那么我将得到 NullPointerException
更新:
总之,我只想要那些元素非空的对象
例如使用 for 循环:
for (ChannelMetadataDetails cmEach : channelMetadataDetails) {
if(cmEach.getId() != null && cmEach.getUnitOfMeasureId() == null && cmEach.getMeasureTypeId() == null) {
channelMetadataDetails.stream().filter(cm -> cm.getId().equals("2")).collect(Collectors.toList());
} else if(cmEach.getId() == null && cmEach.getUnitOfMeasureId() != null && cmEach.getMeasureTypeId() == null) {
channelMetadataDetails.stream().filter(cm -> cm.getUnitOfMeasureId().equals("4")).collect(Collectors.toList());
} else if(cmEach.getId() == null && cmEach.getUnitOfMeasureId() == null && cmEach.getMeasureTypeId() != null) {
channelMetadataDetails.stream().filter(cm -> cm.getMeasureTypeId().equals("5")).collect(Collectors.toList());
} else if(cmEach.getId() != null && cmEach.getUnitOfMeasureId() != null && cmEach.getMeasureTypeId() == null) {
channelMetadataDetails.stream().filter(cm -> cm.getId().equals("2") && cm.getUnitOfMeasureId().equals("4")).collect(Collectors.toList());
} else if(cmEach.getId() != null && cmEach.getUnitOfMeasureId() == null && cmEach.getMeasureTypeId() != null) {
channelMetadataDetails.stream().filter(cm -> cm.getId().equals("2") && cm.getMeasureTypeId().equals("5")).collect(Collectors.toList());
} else if(cmEach.getId() != null && cmEach.getUnitOfMeasureId() != null && cmEach.getMeasureTypeId() != null) {
channelMetadataDetails.stream().filter(cm -> cm.getId().equals("2") && cm.getUnitOfMeasureId().equals("4") && cm.getMeasureTypeId().equals("5")).collect(Collectors.toList());
}
}
你只得到最后一个元素的原因是你的第二个和第三个过滤器要求 cm.getUnitOfMeasureId()
和 cm.getMeasureTypeId()
为空。这仅适用于最后一个元素。如果您只想按 getId()
过滤,请移除其他过滤器:
channelMetadataDetails =
channelMetadataDetails.stream()
.filter(cm -> cm.getId() != null && cm.getId().equals("2"))
.collect(Collectors.toList());
编辑:
根据您的编辑,您希望 3 个属性中至少有一个具有值,并且您想要检查所有 not-null 个值:
channelMetadataDetails =
channelMetadataDetails.stream()
.filter(cm -> cm.getId() != null || cm.getUnitOfMeasureId() != null || cm.getMeasureTypeId() != null)
.filter(cm -> cm.getId() == null || cm.getId().equals("2"))
.filter(cm -> cm.getUnitOfMeasureId() == null || cm.getUnitOfMeasureId().equals("4"))
.filter(cm -> cm.getMeasureTypeId() == null || cm.cm.getMeasureTypeId().equals("5"))
.collect(Collectors.toList());
如何获取id = 2的所有元素?
下面的代码只给出了最后一个,即 channelMetadataDetail3
:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class APICheck {
public static void main(String[] args) {
List<ChannelMetadataDetails> channelMetadataDetails =
new ArrayList<ChannelMetadataDetails>();
ChannelMetadataDetails channelMetadataDetail1 =
new ChannelMetadataDetails();
channelMetadataDetail1.setId("2");
channelMetadataDetail1.setUnitOfMeasureId("3");
ChannelMetadataDetails channelMetadataDetail2 =
new ChannelMetadataDetails();
channelMetadataDetail2.setId("2");
channelMetadataDetail2.setUnitOfMeasureId("3");
channelMetadataDetail2.setMeasureTypeId("5");
ChannelMetadataDetails channelMetadataDetail3 =
new ChannelMetadataDetails();
channelMetadataDetail3.setId("2");
channelMetadataDetails.add(channelMetadataDetail1);
channelMetadataDetails.add(channelMetadataDetail2);
channelMetadataDetails.add(channelMetadataDetail3);
channelMetadataDetails =channelMetadataDetails.
stream().filter(cm -> cm.getId().equals("2")).
filter(cm -> cm.getUnitOfMeasureId().equals(null)).
filter(cm -> cm.getMeasureTypeId().equals(null)).
collect(Collectors.toList());
}
}
注意:- 如果 cm.getUnitOfMeasureId()
为空,那么我将得到 NullPointerException
更新:
总之,我只想要那些元素非空的对象
例如使用 for 循环:
for (ChannelMetadataDetails cmEach : channelMetadataDetails) {
if(cmEach.getId() != null && cmEach.getUnitOfMeasureId() == null && cmEach.getMeasureTypeId() == null) {
channelMetadataDetails.stream().filter(cm -> cm.getId().equals("2")).collect(Collectors.toList());
} else if(cmEach.getId() == null && cmEach.getUnitOfMeasureId() != null && cmEach.getMeasureTypeId() == null) {
channelMetadataDetails.stream().filter(cm -> cm.getUnitOfMeasureId().equals("4")).collect(Collectors.toList());
} else if(cmEach.getId() == null && cmEach.getUnitOfMeasureId() == null && cmEach.getMeasureTypeId() != null) {
channelMetadataDetails.stream().filter(cm -> cm.getMeasureTypeId().equals("5")).collect(Collectors.toList());
} else if(cmEach.getId() != null && cmEach.getUnitOfMeasureId() != null && cmEach.getMeasureTypeId() == null) {
channelMetadataDetails.stream().filter(cm -> cm.getId().equals("2") && cm.getUnitOfMeasureId().equals("4")).collect(Collectors.toList());
} else if(cmEach.getId() != null && cmEach.getUnitOfMeasureId() == null && cmEach.getMeasureTypeId() != null) {
channelMetadataDetails.stream().filter(cm -> cm.getId().equals("2") && cm.getMeasureTypeId().equals("5")).collect(Collectors.toList());
} else if(cmEach.getId() != null && cmEach.getUnitOfMeasureId() != null && cmEach.getMeasureTypeId() != null) {
channelMetadataDetails.stream().filter(cm -> cm.getId().equals("2") && cm.getUnitOfMeasureId().equals("4") && cm.getMeasureTypeId().equals("5")).collect(Collectors.toList());
}
}
你只得到最后一个元素的原因是你的第二个和第三个过滤器要求 cm.getUnitOfMeasureId()
和 cm.getMeasureTypeId()
为空。这仅适用于最后一个元素。如果您只想按 getId()
过滤,请移除其他过滤器:
channelMetadataDetails =
channelMetadataDetails.stream()
.filter(cm -> cm.getId() != null && cm.getId().equals("2"))
.collect(Collectors.toList());
编辑:
根据您的编辑,您希望 3 个属性中至少有一个具有值,并且您想要检查所有 not-null 个值:
channelMetadataDetails =
channelMetadataDetails.stream()
.filter(cm -> cm.getId() != null || cm.getUnitOfMeasureId() != null || cm.getMeasureTypeId() != null)
.filter(cm -> cm.getId() == null || cm.getId().equals("2"))
.filter(cm -> cm.getUnitOfMeasureId() == null || cm.getUnitOfMeasureId().equals("4"))
.filter(cm -> cm.getMeasureTypeId() == null || cm.cm.getMeasureTypeId().equals("5"))
.collect(Collectors.toList());