好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java利用反射对list对象做过滤

​反射对效率有影响 慎用!!! ​

1.对象结构

?

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

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

public class BusinessDept {

private String year; //年

private String month; //月

private String deptName; //部门名称

private String deptLeader; //部门负责人

private Double jyz; //经营值

private Double rev; //收入

private Double exp; //支出

private Double tWorkTime; //填报工时

private Double sWorkTime; //标准工时

private Double param; //经营参数

 

public void setYear(String year) {

this .year = year;

}

 

public void setMonth(String month) {

this .month = month;

}

 

public void setDeptName(String deptName) {

this .deptName = deptName;

}

 

public void setDeptLeader(String deptLeader) {

this .deptLeader = deptLeader;

}

 

public void setJyz(Double jyz) {

this .jyz = jyz;

}

 

public String getYear() {

return year;

}

 

public String getMonth() {

return month;

}

 

public String getDeptName() {

return deptName;

}

 

public String getDeptLeader() {

return deptLeader;

}

 

public Double getJyz() {

return jyz;

}

 

public Double getRev() {

return rev;

}

 

public Double getExp() {

return exp;

}

 

public Double gettWorkTime() {

return tWorkTime;

}

 

public Double getsWorkTime() {

return sWorkTime;

}

 

public Double getParam() {

return param;

}

 

public void setRev(Double rev) {

this .rev = rev;

}

 

public void setExp(Double exp) {

this .exp = exp;

}

 

public void settWorkTime(Double tWorkTime) {

this .tWorkTime = tWorkTime;

}

 

public void setsWorkTime(Double sWorkTime) {

this .sWorkTime = sWorkTime;

}

 

public void setParam(Double param) {

this .param = param;

}

 

public <E> E get(String name) {

Class cl = this .getClass();

 

Field[] fields = cl.getDeclaredFields();

try {

for (Field field : fields) {

field.setAccessible( true );

if (field.getName().equals(name)) {

return (E) field.get( this );

}

}

} catch (IllegalAccessException e) {

e.printStackTrace();

}

return null ;

}

}

2.根据字段名获取value

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public <E> E get(String name) {

Class cl = this .getClass();

 

Field[] fields = cl.getDeclaredFields();

try {

for (Field field : fields) {

field.setAccessible( true );

if (field.getName().equals(name)) {

return (E) field.get( this );

}

}

} catch (IllegalAccessException e) {

e.printStackTrace();

}

return null ;

}

3.对list过滤

?

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

List businessDeptList = this .myQuery();

//筛选符合条件的list

if (businessDeptList.size()> 0 ){

businessDeptList = this .filterExact( "year" ,year,businessDeptList);

businessDeptList = this .filterExact( "month" ,month,businessDeptList);

businessDeptList = this .filterVague( "deptName" ,deptName,businessDeptList);

businessDeptList = this .filterVague( "deptLeader" ,deptLeader,businessDeptList);

if (!StringUtils.isEmpty(jyz)){

businessDeptList = this .filterExact( "jyz" ,Double.parseDouble(jyz),businessDeptList);

}

if (!StringUtils.isEmpty(param)){

businessDeptList = this .filterExact( "param" ,Double.parseDouble(param),businessDeptList);

}

if (!StringUtils.isEmpty(sWorkTime)){

businessDeptList = this .filterExact( "sWorkTime" ,Double.parseDouble(sWorkTime),businessDeptList);

}

if (!StringUtils.isEmpty(rev)){

businessDeptList = this .filterExact( "rev" ,Double.parseDouble(rev),businessDeptList);

}

if (!StringUtils.isEmpty(exp)){

businessDeptList = this .filterExact( "exp" ,Double.parseDouble(exp),businessDeptList);

}

if (!StringUtils.isEmpty(tWorkTime)){

businessDeptList = this .filterExact( "tWorkTime" ,Double.parseDouble(tWorkTime),businessDeptList);

}

 

}

4.精确匹配

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//精确匹配

private <T>List<BusinessDept> filterExact(String name,T t,List<BusinessDept> businessDepts){

if (t.toString().isEmpty()){

return businessDepts;

}

List<BusinessDept> list = new ArrayList<BusinessDept>();

if (businessDepts.size()> 0 ){

for ( int i = 0 ;i<businessDepts.size();i++){

if (businessDepts.get(i).get(name).equals(t)){

list.add(businessDepts.get(i));

}

}

}

return list;

}

5.模糊匹配

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//模糊匹配

private List<BusinessDept> filterVague(String name,String s,List<BusinessDept> businessDepts){

if (s.isEmpty()){

return businessDepts;

}

List<BusinessDept> list = new ArrayList<BusinessDept>();

if (businessDepts.size()> 0 ){

for ( int i = 0 ;i<businessDepts.size();i++){

if (businessDepts.get(i).get(name).toString().contains(s)){

list.add(businessDepts.get(i));

}

}

}

return list;

}

到此这篇关于Java利用反射对list对象做过滤的文章就介绍到这了,更多相关list对象过滤内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.51cto.com/u_12040959/5051652

查看更多关于Java利用反射对list对象做过滤的详细内容...

  阅读:14次