如果所有条件都在谓词中给出,则获取所有匹配的非空元素

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());