使用List或者List計算指定屬性的總和
阿新 • • 發佈:2019-01-07
上班時間偷個閒,回想自己在寫專案的時候用到的大神之作,後進行改編,哈哈,好高大上的感覺。
實現程式碼:
@SuppressWarnings({ "unchecked" })
private static<T> void totalScore(List<T> srouce, String totalScore, String... keys){
if(CollectionUtils.isNotEmpty(srouce) && keys.length != 0){
for(T t : srouce){
int total = 0;
if(t instanceof Map){
Map<String, String > srouceData = (Map<String, String>)t;
for(String key : keys){
total += Float.parseFloat(srouceData.get(key));
}
srouceData. put(totalScore, String.valueOf(total));
}else{
//使用實體類物件的時候,屬性必須是public
try {
for(String key : keys){
String score = t.getClass().getField(key).get(t).toString();
total += Float.parseFloat(score);
}
t.getClass().getField(totalScore).set(t, String.valueOf(total));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
裡邊的內容要根據實際情況改變,程式碼不是萬能,抄襲別人的也不是完全符合,所以就想一些簡單的例子去實現它,理解它。
例子:
public static <T> void main(String[] args) {
// eg1:
List<Map<String, String>> dd = new ArrayList<>();
Map<String, String> map = new HashMap<>();
map.put("a", "1");
map.put("b", "2");
map.put("c", "3");
map.put("d", "n");
dd.add(map);
totalScore(dd, "d", new String[]{"a","b","c"});
System.out.println(dd);
//結果:[{a=1, b=2, c=3, d=6}]
// eg2:
List<Sd> sd = new ArrayList<>();
Sd sds = new Sd("2", "3");
sd.add(sds);
totalScore(sd, "sd", new String[]{"s","d"});
System.out.println(sd);
// 結果:[Sd [s=2, d=3, sd=5]]
}
用到的實體:
class Sd{
public String s;
public String d;
public String sd;
public Sd(String s, String d) {
super();
this.s = s;
this.d = d;
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public String getD() {
return d;
}
public void setD(String d) {
this.d = d;
}
public String getSd() {
return sd;
}
public void setSd(String sd) {
this.sd = sd;
}
@Override
public String toString() {
return "Sd [s=" + s + ", d=" + d + ", sd=" + sd + "]";
}
}
哈哈哈,,這樣就完美了。
沒想到這種想法可以用到很多的地方;虛心學習……