1. 程式人生 > >java將樹狀結構資料通過map分級(一種思路)

java將樹狀結構資料通過map分級(一種思路)

package com.tbxc;

public class Product {
	private Integer id;
	private String name;
	private Integer parentId;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getParentId() {
		return parentId;
	}
	public void setParentId(Integer parentId) {
		this.parentId = parentId;
	}
	
	
}


package com.tbxc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;

public class Test2 {
	public static void main(String[] args) {
		//生成測試物件
		List list = new ArrayList();
		Random random = new Random();
		for(int i=0;i<1000;i++){
			//一級節點
			if(i<=10){
				Product p = new Product();
				p.setId(i);
				p.setName("name"+i);
				list.add(p);
				continue;
			}
			//二級節點
			if(i<=20){
				Product p = new Product();
				p.setId(i);
				p.setName("name"+i);
				int max=10;
			    int min=0;
			    int s = random.nextInt(max)%(max-min+1) + min;
				p.setParentId(s);
				list.add(p);
				continue;
			}
			//三級節點
			if(i<=30){
				Product p = new Product();
				p.setId(i);
				p.setName("name"+i);
				int max=20;
			    int min=10;
			    int s = random.nextInt(max)%(max-min+1) + min;
				p.setParentId(s);
				list.add(p);
				continue;
			}
			//末級節點
			Product p = new Product();
			p.setId(i);
			p.setName("name"+i);
			int max=30;
		    int min=20;
		    int s = random.nextInt(max)%(max-min+1) + min;
			p.setParentId(s);
			list.add(p);
		}
		Iterator iter = list.iterator();
		Map> map = new HashMap>();
		int i = 1;
		while(list.size()>0)
		{
			//一級節點
			if(i==1)
			{
				while(iter.hasNext())
				{
					Product p = iter.next();
					if(p.getParentId()==null)
					{
						List list1;
						if(map.isEmpty())
						{
							list1 = new ArrayList();
						}else{
							list1 = map.get(1);
						}
						list1.add(p);
						iter.remove();
						map.put(1, list1);
					}
				}
			//非一級節點
			}else{
				Iterator iter2 = list.iterator();
				while(iter2.hasNext())
				{
					Product p = iter2.next();
					//獲取上一節點的所有物件資料
					List list2 = map.get(i-1);
					for (Product product : list2) {
						if(p.getParentId() == product.getId())
						{
							List list3;
							if(map.containsKey(i))
							{
								list3 = map.get(i);
							}else{
								list3 = new ArrayList();
							}
							list3.add(p);
							iter2.remove();
							map.put(i, list3);
						}
					}
				}
			}
			i++;
			if(i>10){
				break;
			}
		}
		System.out.println(map.size());
		//System.out.println(list.size());
		//System.out.println(map.get(1).size());
		for(int j=1;j<10;j++)
		{
			if(map.containsKey(j))
			{
				System.out.println(map.get(j).size());
			}
		}
	}
}

相關推薦

java結構資料通過map分級(思路)

package com.tbxc; public class Product { private Integer id; private String name; private Integer parentId; public Integer getId() { return id; }

指定 年-月-日 其封裝tree結構

樹狀 number abstract ren true fin col else bootstrap Scdp.define(‘Violation.view.ViolationView‘, { extend: ‘Scdp.bootstrap.mvc.AbstractCr

oracle結構層級查詢小結--connect by等之測試資料

1.建立表 ( dept_id VARCHAR2(32) not null, dept_name VARCHAR2(128), dept_code VARCHAR2(32), par_dept_id VARCHAR2(32),

Java程式設計】以結構輸出目錄

以樹狀結構輸出計算機某個指定資料夾下的所有的檔案和子資料夾名稱。 提示:使用File的方法,並結合遞迴實現 程式碼如下: import java.io.File; /** * 以樹狀結構輸出計算機

php 實現遍歷資料夾,返回結構陣列

<?php //遍歷資料夾下所有檔案 define('DS', DIRECTORY_SEPARATOR); //根據

陣列 資料結構詳解與模板(可能是最詳細的了)

目錄 單點更新: 區間查詢: 高階操作 求逆序對 操作 原理 查詢 修改 查詢 修改 樹狀陣列基礎 樹狀陣列是一個查詢和修改複雜度都為log(n)的資料結構。主要用於陣列的單點修改&&區間求和

資料結構系列(5)結構

5樹狀結構 “樹”是有一個或一個以上的節點組成,存在一個特殊的節點,稱為樹根。每個節點是一些資料和指標組合而成的記錄。除了樹根,其餘節點可分為n>=0個互斥的集合,其中每一個子集合本身也是一種樹狀結構,即此根節點的子樹。此外一棵合法的樹,節點間可以互相連

利用checkbox自帶屬性indeterminate構建含部分選中狀態的結構

urn true 監聽 tps 多說 con ont 框架 tree 本來上個月就像發的,但是一直忙啊忙的也沒時間整理,所以拖到了現在。 好吧上面這句就是廢話,我就是感概下。下面是正文。 前段時間在弄一個輕量級的web項目,要構建一個樹狀結構目錄,同時希望能把部分選中的狀態

權限模塊_分配權限_顯示結構_頁面中的選中效果

處理 children tro func input Language context image java 權限模塊__分配權限__顯示樹狀結構1 顯示樹狀結構;依賴關系 setPrivilegeUI.jsp <!-- 顯示權限樹 --> &

Sql查詢結構下級子節點的數量

leave SQ 樹狀 div where AR light bsp brush --查詢Id為1的所有子節點層數的數量;with cte as ( select id,parentId,0 as Leave from _TestLeave where id = 1  -

使用Java 前臺傳回的資料,列印成PDF,並插入圖片

前段時間,因專案需求,需要將資料圖片列印成PDF下載儲存, 專案採用前後端分離模式,前端採用angular,後端springboot, 流程:1.前端返回JSON物件,2.後端接收JSON物件,將之轉化成json字串,並解析成 list 物件,3.建立Document物件,4.建立IMGE物

php遞迴實現維陣列轉為指定結構 --- 省市區處理

### 這兩天腦殼痛,一時短路,想不到準備利用遞迴實現這個需求,最後還是要請教同事,回來自己在實現了一遍,並記錄下來 ### 原資料: // { // 廣東省: { // 廣州市: [ // "天河區", // "從化區", // "增城區" // ], // 深

JavaExcel表格中資料匯入至資料庫中的表中

        上一節介紹了Java將資料庫表中資料匯出至Excel表格,那麼本節來介紹它的逆過程,也就是將Excel表格中的資料逐行匯入資料庫中的表中,依然需要使用Apache的POI,上一節已經說過也附了這個jar包的下載地址,這一節就不過多的說,直接講如

Java資料庫表中資料匯出至Excel表格

        在我們學習和使用Java的過程中,會有匯出資料庫中的資料(或其他資料)到表格中的需求。比如你建了一個部落格網站,也寫了很多篇部落格,那麼就想把寫的所有部落格匯出到xls表格中。因為資料在伺服器可能會面臨資料丟失的風險(比如伺服器重灌系統,伺服器

SQL Server 根據結構表生成以/號分割的路由字串

很多情況下,我們有必要把樹形結構進行資料梳理。比如,要方便的過濾出一個父節點下的所有子節點等等。。。 這個時候,我們可以生成一個路徑表字符串,在應用時只需要對該字串進行索引即可達成目的。 目標:按圖示的部門結構樹,獲取本身的完整路徑字串。比如,前道工序部門,其部門程式碼為PDTE,上級部門為PD生產部,按

java基本結構實現

最近複習資料結構,用java寫一個樹的模板,程式碼如下,寫的比較倉促,如果有哪裡寫的不好,或者有錯誤,請在評論區提出,謝謝。 package Tree; import java.util.ArrayList; import java.util.List;

oracle結構層級查詢小結--connect by等

oracle樹狀結構層級查詢小結--connect by等 一、簡介: (1)oracle樹狀結構查詢即層次遞迴查詢,是sql語句經常用到的。 (2)樹狀結構通常由根節點、父節點、子節點和葉節點組成,簡單來說,一張表中存在兩個欄位,dept_id,par_dept_id,那麼通過找到每一條記錄的

Linux結構檔案詳解

Linux樹狀檔案詳解 /           根目錄 /bin        存放使用者可執行程式 /boot       存放系統啟動時所需檔案、核心檔案 /dev      

java資料庫裡的資料匯出到excel

package com.hui10.app.controller.merchant;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Collection;import ja

ztree實現表格風格的結構

var zTreeNodes; var setting = { view: { showLine: false, showIcon: false, addDiyDom: addDiyDom