csv Java将值Map到逗号分隔的字符串

j2datikz  于 11个月前  发布在  Java
关注(0)|答案(8)|浏览(114)

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

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

字符串
寻找将testMap转换为String ->“val 1,val 2”的方法。

sycxhyv7

sycxhyv71#

以下是如何在Java 8+中实现它(不需要Guava,StringUtils或其他外部库):

testMap.values().stream().map(Object::toString).collect(Collectors.joining(","));

字符串

v440hwme

v440hwme2#

Guava:Joiner.on(',').join(map.values())

ubbxdtey

ubbxdtey3#

在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

字符串

kmbjn2e3

kmbjn2e34#

可以使用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

ogsagwnx

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显示为逗号分隔的列表,你可以这样做:

System.out.println(map.values().toString());


输出量:

[2, 4]


PS:如果你愿意,可以用.replaceAll()删除[] s

5jdjgkvh

5jdjgkvh6#

您可以在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集合的提交者。

8nuwlpux

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

z9smfwbn

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(","));

字符串
至少这是按键排序的,而且更安全一点?

相关问题