有没有一种有效的方法可以使用 guava 或 StringUtils 将 java 映射值转换为逗号分隔的字符串?
Map<String, String> testMap = new HashMap<>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");
寻找一种将 testMap 转换为字符串的方法 ->“val1,val2”。
以下是在 Java 8+ 中执行此操作的方法(不需要 Guava、StringUtils 或其他外部库):
testMap.values().stream().map(Object::toString).collect(Collectors.joining(","));
番石榴:
Joiner.on(',').join(map.values())
.
在 Java 1.8 中,String 类中添加了一个 join() 方法可以执行此操作。
此外
Map
有一个函数 values()
来获取所有值。 map.values() 是字符串类型,因此只需传递给 String.join 即可。示例:
Map<String, String> testMap = new HashMap<>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");
String valueString = String.join(",",map.values()); //val1,val2
您可以使用
StringUtils
:
final Map<String, String> testMap = new LinkedHashMap<String, String>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");
String csv = StringUtils.join(testMap.values(), ',')); // "val1,val2"
注意,我将
HashMap
更改为 LinkedHashMap
,以保持插入顺序。
好的,这是我的猜测,以防您想要这样的东西(您的问题中没有澄清)。这是在没有 Guava 或 StringUtils 的情况下完成的:
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 2);
map.put(3, 4);
System.out.println(map.toString());
输出:
{1=2, 3=4}
如果您想将
values
显示为逗号分隔列表,您可以使用以下命令:
System.out.println(map.values().toString());
输出:
[2, 4]
PS:如果需要,请用
[]
删除 .replaceAll()
您可以在
Eclipse Collections中使用
makeString()
。
MutableMap<String, String> testMap = new UnifiedMap<String, String>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");
String commaAndSpace = testMap.makeString();
Assert.assertTrue(commaAndSpace.equals("val1, val2")
|| commaAndSpace.equals("val2, val1"));
String comma = testMap.makeString(",");
Assert.assertTrue(comma.equals("val1,val2")
|| comma.equals("val2,val1"));
如果您无法将
Map
转换为 Eclipse Collections 类型,您可以使用 MapAdapter
。
MapAdapter.adapt(testMap).makeString();
注意: 我是 Eclipse 集合的提交者。
如果您正在使用 Spring MVC 那么这可能适合您。
import org.springframework.util.StringUtils;
Map<String, String> groups = //List of Maps
List<String> targetList = new ArrayList<String>(groups).values());
String csv = StringUtils.arrayToCommaDelimitedString(targetList.toArray());
输出:abc,def,ghi
我认为排序在这里可能很重要。不确定 map.values() 是否按确定顺序返回,所以我更喜欢这个:
Map<String, Object> map = new HashMap<>();
map.put("key1","val1");
map.put("key2","val2");
String formatted = map.keySet().stream().sorted()
.map(k -> map.getOrDefault(k, "").toString())
.collect(Collectors.joining(","));
至少这样按键排序并且更安全一点?