Значения карты Java в строке с разделителями-запятыми

Есть ли эффективный способ преобразования значений карты Java в строку через запятую, используя guava или StringUtils?

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

ищу способ конвертировать testMap в строку -> "val1,val2".

7 ответов

Вот как это сделать в Java 8 (не требует Guava, StringUtils или других внешних библиотек):

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

Гуава: Joiner.on(',').join(map.values()),

Map имеет функцию values() чтобы получить все значения. map.values ​​() является строковым типом, поэтому передайте в строку joiner. Пример:

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() если ты хочешь

Ты можешь использовать makeString() в коллекциях Eclipse.

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, вы можете использовать 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

Другие вопросы по тегам