Java 遍历对象列表、获取属性的最佳方法

Java 遍历对象列表、获取属性的最佳方法,java,spring-boot,Java,Spring Boot,如果存在某些属性值,从现有对象列表创建新属性列表的最佳方法是什么?我应该将列表转换为地图吗?但是我希望列表属性是映射键,我不知道如何获取属性 我是否应该遍历这个列表,如果列表的某个属性有值,则将该属性添加到新列表中,或者是否有更快或更好的方法来实现我的目标 我需要这个新列表来创建一个带有动态标题的表 List commissionSched=commissionScheduleRepository.findbycharrier(承运人); List hs=新的ArrayList(); 用于(佣

如果存在某些属性值,从现有对象列表创建新属性列表的最佳方法是什么?我应该将列表转换为地图吗?但是我希望列表属性是映射键,我不知道如何获取属性

我是否应该遍历这个列表,如果列表的某个属性有值,则将该属性添加到新列表中,或者是否有更快或更好的方法来实现我的目标

我需要这个新列表来创建一个带有动态标题的表

List commissionSched=commissionScheduleRepository.findbycharrier(承运人);
List hs=新的ArrayList();
用于(佣金计划表cs:佣金已兑现){
如果(cs.getCategory()!=null){
hs.添加(“类别”);
}else if(cs.getAutoNew()!null){
hs.添加(“自动新增”);
}
//…等等

}
您可以使用Java反射API,如:

    UnaryOperator<String> capitalize = s -> s.substring(0, 1).toUpperCase() + s.substring(1);
    for (Field att : CommissionSchedule .class.getDeclaredFields()) {
        Method getter = CommissionSchedule .class.getDeclaredMethod(String.format("get%s", capitalize.apply(att.getName())));
        if (getter.invoke(b1) != null) {
            hs.add(att.getName());
        }
    }
}
unarycoperator capitalize=s->s.substring(0,1).toUpperCase()+s.substring(1);
for(字段att:CommissionSchedule.class.getDeclaredFields()){
方法getter=CommissionSchedule.class.getDeclaredMethod(String.format(“get%s”,大写.apply)(att.getName());
if(getter.invoke(b1)!=null){
hs.add(att.getName());
}
}
}

如果您的类是Bean,则此选项可用。您可以使用utilities API像BeanUtils一样操纵bean。

为什么不在CommissionSchedule类中添加一个assessor

String getHs(){
    return  category !=null ?  "Category":
            autoNew !=null ? "Auto New" :
            "others" ; 
}
然后在循环中,您只需要调用getHs()方法

使用流可能是这样的

List<CommissionSchedule> commissionSched = 
    commissionScheduleRepository.findByCarrier(carrier);

List<String> hs = commisionSched.stream()
                        .map(cs -> cs.getHs())
                        .collect(Collectors.toList());
List commissionSched=
佣金计划存储库。findByCarrier(承运人);
列表hs=commissionsched.stream()
.map(cs->cs.getHs())
.collect(Collectors.toList());
或者,你可以这样做

List <String> hs= new ArrayList<>();
for (CommissionSchedule cs: commissionSched){
    hs.add(cs.getHs());  
}
List hs=new ArrayList();
用于(佣金计划表cs:佣金已兑现){
hs.add(cs.getHs());
}