1.提取List<bean>中的某属性集合; 2.List<bean>排序(需要指定升序降序和排序字段的类型)

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import com.google.common.collect.Lists;

@Service
public class ListUtil {

    private static final String TRUE = "true";

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static List extractionProperty(List list, String fieldName) {

        List rList = Lists.newArrayList();

        try {
            for (int i = 0; i < list.size(); i++) {
                Object obj = list.get(i);
                Field field[] = list.get(i).getClass().getDeclaredFields();
                for (Field f : field) {
                    f.setAccessible(true);
                    if (fieldName.equals(f.getName())) {
                        rList.add(f.get(obj));
                        break;
                    }
                }
            }
            if (rList.isEmpty()) {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

        return rList;
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static void sort(List list, String fieldName, SortType sortType, FieldType fieldType) {

        final String FIELD_NAME = fieldName;
        final int SORT_TYPE = sortType.getValue();
        final int FIELD_TYPE = fieldType.getValue();

        Collections.sort(list, new Comparator() {
            public int compare(Object arg0, Object arg1) {
                try {
                    Object object0 = (Object) arg0;
                    Object object1 = (Object) arg1;
                    Field field0[] = object0.getClass().getDeclaredFields();
                    Field field1[] = object1.getClass().getDeclaredFields();
                    String sVal0 = "";
                    String sVal1 = "";
                    BigDecimal bVal0 = BigDecimal.ZERO;
                    BigDecimal bVal1 = BigDecimal.ZERO;
                    int boVal0 = 0;
                    int boVal1 = 0;
                    for (Field f0 : field0) {
                        f0.setAccessible(true);
                        if (FIELD_NAME.equals(f0.getName())) {
                            if (FieldType.CHARACTER.getValue() == FIELD_TYPE) {
                                sVal0 = String.valueOf(f0.get(object0));
                            } else if (FieldType.DIGITAL.getValue() == FIELD_TYPE) {
                                bVal0 = new BigDecimal(String.valueOf(f0.get(object0)));
                            } else {
                                if (TRUE.equals(String.valueOf(f0.get(object0)))) {
                                    boVal0 = 1;
                                } else {
                                    boVal0 = 0;
                                }
                            }
                            break;
                        }
                    }
                    for (Field f1 : field1) {
                        f1.setAccessible(true);
                        if (FIELD_NAME.equals(f1.getName())) {
                            if (FieldType.CHARACTER.getValue() == FIELD_TYPE) {
                                sVal1 = String.valueOf(f1.get(object1));
                            } else if (FieldType.DIGITAL.getValue() == FIELD_TYPE) {
                                bVal1 = new BigDecimal(String.valueOf(f1.get(object1)));
                            } else {
                                if (TRUE.equals(String.valueOf(f1.get(object1)))) {
                                    boVal1 = 1;
                                } else {
                                    boVal1 = 0;
                                }
                            }
                            break;
                        }
                    }
                    if (SortType.DESC.getValue() == SORT_TYPE) {
                        if (FieldType.CHARACTER.getValue() == FIELD_TYPE) {
                            return sVal1.compareTo(sVal0);
                        } else if (FieldType.DIGITAL.getValue() == FIELD_TYPE) {
                            return bVal1.compareTo(bVal0);
                        } else {
                            return boVal1 < boVal0 ? 1 : -1;
                        }
                    } else {
                        if (FieldType.CHARACTER.getValue() == FIELD_TYPE) {
                            return sVal0.compareTo(sVal1);
                        } else if (FieldType.DIGITAL.getValue() == FIELD_TYPE) {
                            return bVal0.compareTo(bVal1);
                        } else {
                            return boVal0 < boVal1 ? 1 : -1;
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return 0;
                }
            }
        });
    }
}

public enum FieldType {

    DIGITAL(0), CHARACTER(1), BOOLEAN(2);

    private int value;

    private FieldType(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
}

public enum SortType {

    ASC("ASC", 1), DESC("DESC", 2);

    private String name;
    private int value;

    private SortType(String name, int value) {
        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
}
时间: 2024-11-02 23:28:22

1.提取List<bean>中的某属性集合; 2.List<bean>排序(需要指定升序降序和排序字段的类型)的相关文章

HTML中实现Table表头点击升序/降序排序

1 题目:如下图,请实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序. 2 姓名 力量 敏捷 智力 3 德鲁伊王 17 24 13 4 月之骑士 15 22 16 5 众神之王 19 15 20 6 流浪剑客 23 15 14 7 基本思路: 8 点击将各列数值存入数组第一次点击?(className=="as"?)升序排序(className="desc")按新排列的数组的顺序,将各列赋予新值

对数组中的对象进行升序以及降序的排序方法(其中对象类型是系统类型).

[cpp] view plaincopyprint? <span style="font-size:32px;">NSArray *arr = [[NSArray alloc] initWithObjects:@"aa",@"bb",@"cc",@"dd",@"ee",@"ff", nil]; //1.对数组进行升序排序 //sortedArrayUsin

angularJS可以实现常常看到购物车中的升序降序效果

{ "xinxi":[ {"id":100,"name":"baobo","age":12}, {"id":99,"name":"paopo","age":18}, {"id":50,"name":"xinxin","age":55}, {"

Spring bean的自动装配属性

bean的自动装配属性能简化xml文件配置. bean 的自动装配属性分为四种: 1.byName 2.byTyoe 3.constructor 4. autodetect byName: 它查找配置文件中的的bean的id 或者name 和本bean中的成员属性名相同的bean 自动装配 所以不用再给本bean添加peoperty标签 例:有两个类 public Class  Person{ } public Class Customer{ private Person p; public s

PHP 正则表达式匹配 img ,PHP 正则提取或替换图片 img 标记中的任意属性。

PHP正则提取或替换img标记属性 PHP 正则表达式匹配 img ,PHP 正则提取或替换图片 img 标记中的任意属性. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <?php /*PHP正则提取图片img标记中的任意属性*/ $str = '<center><img src="/uploads/images/20100516000.jpg"

反射将Bean中属性为null的设置为&quot;&quot;

1.利用反射将Java Bean中string类型属性值为null的设为"" 1 SomeClass obj = new SomeClass(); 2 Class c = SomeClass.class; 3 Field[] fields = c.getDeclaredFields(); 4 for(int i = 0; i < fields.length; i++) 5 { 6 String fieldName = fields[i].getName(); 7 fieldNam

spring中使用@RequestBody,对应的bean中属性名大写注入为空的解决方法

最近做项目用到了spring的新特性@RequestBody,非常好用,客户端发送的json串直接给转换并且注入给bean,以前自己用都是按照SUN的java命名规范进行的项目开发,没发觉有什么异常. 给客户做项目,得按照客户的需求来,客户的需求是不受什么规范约束的,恰好客户给的需求是json串里面的变量名首字母全是大写,囧,如果按照常规java命名规则的话这是给class命名的方法. 等到做出几个接口之后,自己测试时,发现用@RequestBody死活将客户端传过来的变量赋不到相应的bean中

清除bean中所有非基本数据类型的属性值

利用beanutils清除javabean中所有非基本数据类型的属性值: import com.google.gson.Gson; import lombok.Data; import org.apache.commons.beanutils.PropertyUtilsBean; import java.beans.PropertyDescriptor; @Data public class RequestParams { private String name; private Integer

spring中使用parent属性来减少配置

在基于spring框架开发的项目中,如果有多个bean都是一个类的实力,如配置多个数据源时,大部分配置的属性都一样,只有少部分不一样,经常是copy上一个的定义,然后修改不一样的地方.其实spring bean定义也可以和对象一样进行继承. 示例如下:  <bean id="testBeanParent"  abstract="true"  class="com.wanzheng90.bean.TestBean">         &