Map中处理指定key对应value值【key可以为A.B.C】

本文介绍如何在Map中操作具有层级结构的key(如A.B.C),包括获取、更新和删除这些key对应的value。内容涵盖递归方法和Java 8的流处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.cwq.demo01;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/** 
 * @author Carpoor  
 * @date 2021年4月7日 
 */
public class Demo03 {
	
	public static Set<String> set = new HashSet<>();
	
	static {
		set.add("String");
		set.add("Integer");
		set.add("Double");
//		set.add("");
	}
	
	public static void main(String[] args) {
		
		List<String> xxx = new ArrayList<>();
		xxx.add("X.D");
		xxx.add("X.E");
		xxx.add("A.B.C");
		xxx.add("amount");
//		String[] keys = "A.B.C".split("\\.");
		
		Map<String, Object> map = new HashMap<>();
		
		map.put("amount", "6666");
		Map<String, Object> map1 = new HashMap<>();
		map1.put("amount", "7777");
		map.put("loan", map1);
		
		Map<String, Object> C = new HashMap<>();
		C.put("C", "Cc");
		Map<String, Object> A = new HashMap<>();
		A.put("B", C);
		map.put("A", A);
		
//		Map<String, Object> C = new HashMap<>();
//		C.put("C", "Cc");
//		Map<String, Object> A = new HashMap<>();
//		A.put("B", C);
//		map.put("A", C);
		
		Map<String, Object> D = new HashMap<>();
		D.put("D", "DD");
		D.put("G", "GG");
		Map<String, Object> E = new HashMap<>();
		E.put("E", "EE");
		E.put("F", "FF");
		
		List<Map<String, Object>> list = new ArrayList<>();
		list.add(D);
		list.add(E);
		
//		map.put("D", D);
		map.put("X", list);
		
		
		System.out.println(map);
		for (String str : xxx) {
			String[] keys = str.split("\\.");
			
			test(map, Arrays.asList(keys), 0, keys.length-1, (Map<String, Object> content, String key)->{
				content.put(key, content.get(key) + "处理了");
				System.out.println("------------------key:"+key);
			});
		}
		System.out.println(map);
		
	}
	
	public static void test(Map<String, Object> content, List<String> keys, Integer index, Integer length, FileProc fileProc) {
		
		Object object = content.get(keys.get(index));
		if (object == null) {
			return;
		}
		if (set.contains(object.getClass().getSimpleName())) {
			if (index == length) {
				fileProc.proc(content, keys.get(index));
			}
			else {
				System.out.println("不允许处理------------------false");
			}
		}
		else if (object instanceof List) {
			List list = (List)object;
			for (Object obj : list) {
				if (obj instanceof Map) {
					Map<String, Object> map = (Map)obj;
					test(map, keys, index+1, length, fileProc);
				}
			}
		}
		else if (object instanceof Map) {
			Map<String, Object> map = (Map)object;
			test(map, keys, index+1, length, fileProc);
		}
	}
	
	public interface FileProc{
		
		public void proc(Map<String, Object> content, String key);
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值