ConvertUtil.java
3.51 KB
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package com.bsth.util;
import com.google.common.collect.ArrayListMultimap;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Field;
import java.util.*;
/**
* 数据转换
* Created by panzhao on 2017/3/13.
*/
public class ConvertUtil<T> {
Logger logger = LoggerFactory.getLogger(this.getClass());
private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyyMMdd");
/**
* 根据指定字段 将 list 分组
*
* @param list
* @param separator 字段使用分隔符连接 组成key
* @param fields
* @return
*/
public ArrayListMultimap<String, T> groupMultiList(List<T> list, String separator, Field... fields) {
ArrayListMultimap<String, T> multimap = ArrayListMultimap.create();
String key;
//Object field;
try {
for (T t : list) {
key = "";
for (Field f : fields) {
f.setAccessible(true);
if(null == f.get(t))
continue;
//日期类型格式化为 YYYY-MM-DD
if (f.getType().equals(Date.class))
key += (separator + fmtyyyyMMdd.print(((Date) f.get(t)).getTime()));
else
key += (separator + f.get(t).toString());
}
if(key.length() > 1)
key = key.substring(1);
multimap.put(key, t);
}
} catch (Exception e) {
logger.error("", e);
}
return multimap;
}
/**
* 根据指定字段 将 list 分组
*
* @param list
* @param separator 字段使用分隔符连接 组成key
* @param fields
* @return
*/
public Map<String, T> groupList(List<T> list, String separator, Field... fields) {
Map<String, T> map = new HashMap<>();
String key;
//Object field;
try {
for (T t : list) {
key = "";
for (Field f : fields) {
f.setAccessible(true);
//日期类型格式化为 YYYY-MM-DD
if (f.getType().equals(Date.class))
key += (separator + fmtyyyyMMdd.print(((Date) f.get(t)).getTime()));
else
key += (separator + f.get(t).toString());
}
key = key.substring(1);
map.put(key, t);
}
} catch (Exception e) {
logger.error("", e);
}
return map;
}
/**
* 计算并集
*
* @param all
* @param sub
* @return
*/
public List<String> calcUnion(Collection<String> all, Collection<String> sub) {
List<String> rs = new ArrayList<>();
for (String str : all) {
if (sub.contains(str))
rs.add(str);
}
return rs;
}
/**
* 计算补集
*
* @param all
* @param sub
* @return
*/
public List<String> calcComplement(Collection<String> all, Collection<String> sub) {
List<String> rs = new ArrayList<>();
for (String str : all) {
if (!sub.contains(str))
rs.add(str);
}
return rs;
}
}