17

有没有一种有效的方法可以使用 guava 或 StringUtils 将 Java 映射值转换为逗号分隔的字符串?

Map<String, String> testMap = new HashMap<>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");

寻找一种将 testMap 转换为 String -> "val1,val2" 的方法。

4

7 回答 7

29

以下是在 Java 8+ 中的操作方法(不需要 Guava、StringUtils 或其他外部库):

testMap.values().stream().map(Object::toString).collect(Collectors.joining(","));
于 2015-07-02T16:19:45.393 回答
11

番石榴:Joiner.on(',').join(map.values())

于 2013-12-26T17:30:16.907 回答
9

在 Java 1.8 中,一个join()方法被添加到可以执行此操作的 String 类中。

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
于 2016-10-13T07:32:51.967 回答
5

您可以使用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为 a LinkedHashMap,以保持插入顺序。

于 2013-12-26T16:40:29.650 回答
2

好的,这是我的猜测,以防你想要这样的东西(你的问题没有澄清)。这是在没有 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:如果需要,请删除[]s.replaceAll()

于 2013-12-26T16:38:37.280 回答
1

您可以makeString()Eclipse Collections中使用。

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 集合的提交者。

于 2013-12-26T18:48:12.873 回答
0

如果您使用的是 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

于 2016-04-26T10:48:02.213 回答