有没有一种有效的方法可以使用guava或StringUtils将java map值转换为逗号分隔的字符串?
Map<String, String> testMap = new HashMap<>(); testMap.put("key1", "val1"); testMap.put("key2", "val2");
字符串寻找将testMap转换为String ->“val 1,val 2”的方法。
sycxhyv71#
以下是如何在Java 8+中实现它(不需要Guava,StringUtils或其他外部库):
testMap.values().stream().map(Object::toString).collect(Collectors.joining(","));
字符串
v440hwme2#
Guava:Joiner.on(',').join(map.values())。
Joiner.on(',').join(map.values())
ubbxdtey3#
在Java 1.8中,一个join()方法被添加到String类中,可以做到这一点。Map也有一个函数values()来获取所有值。map.values()是字符串类型,所以只需传递给String.join。示例:
Map
values()
Map<String, String> testMap = new HashMap<>(); testMap.put("key1", "val1"); testMap.put("key2", "val2"); String valueString = String.join(",",map.values()); //val1,val2
kmbjn2e34#
可以使用StringUtils:
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。
HashMap
LinkedHashMap
ogsagwnx5#
好吧,如果你想要这样的东西,这是我的猜测(在你的问题中没有澄清)。这是在没有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显示为逗号分隔的列表,你可以这样做:
values
System.out.println(map.values().toString());
型输出量:
[2, 4]
型PS:如果你愿意,可以用.replaceAll()删除[] s
.replaceAll()
[]
5jdjgkvh6#
您可以在Eclipse Collections中使用makeString()。
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
MapAdapter.adapt(testMap).makeString();
型
**注意:**我是Eclipse集合的提交者。
8nuwlpux7#
如果你正在使用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
z9smfwbn8#
我认为排序在这里可能很重要。不确定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(","));
字符串至少这是按键排序的,而且更安全一点?
8条答案
按热度按时间sycxhyv71#
以下是如何在Java 8+中实现它(不需要Guava,StringUtils或其他外部库):
字符串
v440hwme2#
Guava:
Joiner.on(',').join(map.values())
。ubbxdtey3#
在Java 1.8中,一个join()方法被添加到String类中,可以做到这一点。
Map
也有一个函数values()
来获取所有值。map.values()是字符串类型,所以只需传递给String.join。示例:字符串
kmbjn2e34#
可以使用
StringUtils
:字符串
注意,为了保持插入顺序,我将
HashMap
改为LinkedHashMap
。ogsagwnx5#
好吧,如果你想要这样的东西,这是我的猜测(在你的问题中没有澄清)。这是在没有Guava或StringUtils的情况下完成的:
字符串
输出量:
型
如果你想将
values
显示为逗号分隔的列表,你可以这样做:型
输出量:
型
PS:如果你愿意,可以用
.replaceAll()
删除[]
s5jdjgkvh6#
您可以在Eclipse Collections中使用
makeString()
。字符串
如果不能将
Map
转换为Eclipse Collections类型,可以使用MapAdapter
。型
**注意:**我是Eclipse集合的提交者。
8nuwlpux7#
如果你正在使用Spring MVC,那么这可能对你有用。
字符串
输出:abc、def、ghi
z9smfwbn8#
我认为排序在这里可能很重要。不确定map.values()是否以确定性顺序返回,所以我更喜欢这样:
字符串
至少这是按键排序的,而且更安全一点?