Значения карты 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(","));
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