package com.uniclick.dap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class TestDoubleArray {
/**
* @function 此類的功能是把二維字符串數組的前2列相同的合併,後2列相應的值相加
* @author [email protected]
* @time 2013-02-24
* @param args
*/
public static void main(String[] args) {
String[][] arr = {
{"新浪","學生","10","5"},
{"網易","學生","9","4"},
{"新浪","白領","8","3"},
{"新浪","學生","15","2"},
{"網易","白領","19","7"},
{"百度","白領","20","5"},
{"新浪","學生","4","1"},
{"新浪","白領","1","1"},
{"網易","學生","9","4"},
{"網易","學生","9","4"},
{"網易","學生","5","5"},
};
//add to set
Set<String> set = new HashSet<String>();
for(int i=0;i<arr.length;i++){
set.add(arr[i][0]+"\t"+arr[i][1]);
}
//此二維數組用來裝結果
String[][] result = new String[set.size()][4];
// Object[][] result = new Object[set.size()][4];
//
Iterator<String> itr = set.iterator();
int r = 0;
while(itr.hasNext()){
String mark = itr.next();
//如果沒有初始化,就賦值爲0,免得null報錯
int res2 = Integer.valueOf(result[r][2]==null?"0":result[r][2]);
int res3 = Integer.valueOf(result[r][3]==null?"0":result[r][3]);
for(int i=0;i<arr.length;i++){
if(mark.equalsIgnoreCase(arr[i][0]+"\t"+arr[i][1])){
result[r][0]=arr[i][0];
result[r][1]=arr[i][1];
res2 += Integer.valueOf(arr[i][2]);
res3 += Integer.valueOf(arr[i][3]);
}
result[r][2]=Integer.toString(res2);
result[r][3]=Integer.toString(res3);
}
r++;
}
//print result array
for(int i=0;i<result.length;i++){
System.out.println(result[i][0]+":"+result[i][1]+":"+result[i][2]+":"+result[i][3]);
}
}
}
console print:
新浪:白領:9:4
新浪:學生:29:8
百度:白領:20:5
網易:白領:19:7
網易:學生:32:17
PS:這個問題困擾了我幾天了,絞盡腦汁才把這功能實現,不知還有沒有更好的方法實現。工期緊,留待以後再優化。