Java中Map和List组合使用的例子

本文介绍了如何使用Java将输入的字符串数组转换为List<Map<String, String>>格式,并演示了如何在每个Map中添加'chineseParam'键及其对应的值。重点在于处理和映射原始数据结构的过程。

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

使用Java很方便的一条就是Java封装了很多方便使用的Map和List。

这是我在开发过程中遇到的问题,通过传入的字符串封装成List<Map<String, String>>格式,然后进行想要的操作,奉上代码!

/* 输入参数:
	 * [{"index":"SB001","value":"0.380658"},{"indexNo":"SB002","value":"19.801300"},
	 * {"index":"SB003","value":"1.479825"},{"indexNo":"SB004","value":"15.371400"},
	 * {"index":"SB005","value":"1.079054"}]
	 * 返回值:
	 * [{"index":"SB001","value":"0.380658","chineseParam":"指标一"},{"indexNo":"SB002","value":"19.801300","chineseParam":"指标二"},
	 * {"index":"SB003","value":"1.479825","chineseParam":"指标三"},{"indexNo":"SB004","value":"15.371400","chineseParam":"指标四"},
	 * {"index":"SB005","value":"1.079054","chineseParam":"指标五"}]
	*/
	public static List<Map<String, String>> addKeyAndValueInMap(List<Map<String, String>> list) {
		
		Map<String, String> keyValue =new HashMap<String,String>();
		keyValue.put("SB001", "指标一");
		keyValue.put("SB002", "指标二");
		keyValue.put("SB003", "指标三");
		keyValue.put("SB004", "指标四");
		keyValue.put("SB005", "指标五");
		keyValue.put("SB006", "指标六");
		keyValue.put("SB007", "指标七");
		
		for(Map<String, String> map : list){
			String key = map.get("index");
			if(keyValue.containsKey(key)){
				map.put("chineseParam", keyValue.get(key));
			}
		}

		return list;
	}
	/* 输入参数:list1
	 * [{"index":"SB001","value":"0.3"},{"indexNo":"SB002","value":"19.0"},
	 * {"index":"SB003","value":"1.4"},{"indexNo":"SB004","value":"15"},
	 * {"index":"SB005","value":"1.0"}]
	 * 输入参数:list2
	 * [{"index":"SB001","value":"0.4"},{"indexNo":"SB002","value":"19.1"},
	 * {"index":"SB003","value":"1.5"},{"indexNo":"SB004","value":"12"},
	 * {"index":"SB005","value":"1.0"}]
	 * 返回值:
	 * ["SB001":"1","SB002":"1",
	 * "SB003":"1","SB004":"-1",
	 * "SB005":"1"]
	*/
	public static Map<String, String> compareList(List<Map<String, String>> list1,List<Map<String, String>> list2){
		
		Map<String , String> map1 = new HashMap<String , String>() ;
		Map<String , String> map2 = new HashMap<String , String>() ;
		for(Map<String , String> a : list1){
			map1.put( a.get("index") , a.get("value")) ;
		}
		for(Map<String , String> b : list2){
			map2.put( b.get("index") , b.get("value")) ;
		}
		
		Map<String , String> map3 = new HashMap<String , String>() ;
		for(Map.Entry<String, String> a : map1.entrySet()){
			String key = a.getKey() ;
			String value = a.getValue() ;
			if(map2.containsKey(key)){
				map3.put(key , value.compareTo(map2.get(key)) < 0 ? "-1" : "1") ;
			}
		}
		return map3;
	}
### Java中将Map转换为ListJava中,可以通过遍历`Map`中的每一个条目(entry),并将其键或值添加到列表中来实现`Map`到`List`的转换。如果目标是创建一个由自定义对象组成的列表,则可以在遍历时构建这些对象并将它们加入列表。 对于给定的例子,在Java中将`Map<String, Integer>`转换成`List<Person>`的过程如下所示[^1]: ```java import java.util.*; class Person { private final String name; private final int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } } public class MapToListExample { public static void main(String[] args) { // 创建一个HashMap实例 Map<String, Integer> map = new HashMap<>(); map.put("Alice", 18); map.put("Bob", 21); map.put("Charlie", 25); // 将map转为person list List<Person> personList = new ArrayList<>(); for (Map.Entry<String, Integer> entry : map.entrySet()) { personList.add(new Person(entry.getKey(), entry.getValue())); } System.out.println(personList.toString()); } } ``` 这段代码展示了如何通过迭代`Map`的所有入口,并利用每个入口的信息初始化一个新的`Person`对象,最后把这些新创建的对象收集到一个`ArrayList`里。此方法适用于任何想要基于`Map`的内容生成特定类型的集合的情况。 除了上述方式外,还可以采用流操作简化这一过程,特别是当使用的是Java 8及以上版本时。下面是一个更简洁的做法,它同样实现了相同的功能但是更加优雅[^4]: ```java // 使用Stream API进行转换 List<Person> personListStream = map.entrySet().stream() .map(e -> new Person(e.getKey(), e.getValue())) .collect(Collectors.toList()); System.out.println(personListStream.toString()); ``` 这种方法不仅减少了样板代码的数量,而且提高了可读性维护性。此外,由于内部采用了优化过的算法,性能上也可能有所提升。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值