不确定以以下格式获取此列表的最佳方法。请提出在Java中获取此格式的更好方法。下面的列表也是动态的。有时值最多可以达到10个或更多
List<String> list = Arrays.asList("ABC", "DEF", "GHI");
现在我们希望上面的列表打印如下-
[{"key" : "ABC"}, {"key" : "DEF"}, {"key" : "GHI"}]
我尝试使用如下所示的MultiMap
Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("key", "ABC");
multimap.put("key", "DEF");
multimap.put("key", "GHI");
打印哪个值,如
{key=[ABC, DEF, GHI]}
字符串是不可变的。因此,您必须在列表中再次设置该值。试试这个。
List<String> list = Arrays.asList("ABC", "DEF", "GHI");
for(int i = 0; i < list.size();i++){
list.set(i,"{\"key\" : \""+list.get(i)+"\"}");
}
您可以访问基础条目结构multimap.entries()
并根据需要设置字符串格式。
multimap.entries().stream()
.map(entry -> String.format("{\"%s\": \"%s\"}", entry.getKey(), entry.getValue()))
.collect(Collectors.toList()));
ernest_k已经提供了两种不错的方法来在注释部分中获取所需的字符串。您可以通过编写可以使用键的自定义类来扩展这些解决方案。
List<String> list = Arrays.asList("ABC", "DEF", "GHI");
MapKeyToValues keyValues = new MapKeyToValues("key", list); // change key as per your need
System.out.println(keyValues);
String formattedString = keyValues.toString();
自定义转换器类。
public class MapKeyToValues {
private final String key;
private final List<String> list;
public MapKeyToValues(String key, List< String > list) {
this.key = key;
this.list = list;
}
@Override
public String toString( ) {
// need to handle null cases here
return list.stream()
.map(value -> String.format("{\"%s\" : \"%s\"}", key, value))
.collect(Collectors.toList()).toString();
}
}
有很多方法可以做到这一点,几乎没有(至少使用Java8):
public class Testinggg {
public static void main(String[] args) {
List<String> list = Arrays.asList("ABC", "DEF", "GHI");
System.out.println(list.stream().collect(Collectors.joining("\"}, {\"key\":\"", "[{\"key\":\"", "\"}]")));
System.out.println(list.stream().map(e-> String.format("{\"key\":" + "\"%s\"}",e)).collect(Collectors.toList()));
System.out.println(list.stream().map(item -> "{\"key\":\"" + item + "\"}").collect(Collectors.joining(", ","[","]")));
}
}
但是似乎您正在尝试将其转换为类似于json的格式,因此使用诸如jackson或gson之类的库将变得很少。如果您将开始处理更复杂的对象,那就更少了。看到这个Converting Java objects to JSON with Jackson