把二維字符串數組的前2列相同的合併,後2列相應的值相加

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:這個問題困擾了我幾天了,絞盡腦汁才把這功能實現,不知還有沒有更好的方法實現。工期緊,留待以後再優化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章