我有一张带有Integer
键和值的地图。我需要将其转换为具有此特定格式的String
:key1 - val1, key2 - val2, key3 - val3
。现在,我使用forEach
格式化每个元素,将它们收集到List中,然后执行String.join();
List<String> ships = new ArrayList<>(4);
for (Map.Entry<Integer, Integer> entry : damagedMap.entrySet())
{
ships.add(entry.getKey() + " - " + entry.getValue());
}
result = String.join(",", ships);
有没有更短的方法呢?用lambda做这件事会很好,因为我需要一些使用lambdas的练习。
答案 0 :(得分:78)
我认为你正在寻找这样的东西:
import java.util.*;
import java.util.stream.*;
public class Test {
public static void main(String[] args) throws Exception {
Map<Integer, String> map = new HashMap<>();
map.put(1, "foo");
map.put(2, "bar");
map.put(3, "baz");
String result = map.entrySet()
.stream()
.map(entry -> entry.getKey() + " - " + entry.getValue())
.collect(Collectors.joining(", "));
System.out.println(result);
}
}
依次查看位:
entrySet()
获取可迭代的条目序列stream()
为该可迭代的map()
将该条目流转换为“key - value”形式的字符串流collect(Collectors.joining(", "))
使用", "
作为分隔符,将流中的所有条目合并为一个字符串。 Collectors.joining
是一个返回Collector
的方法,它可以处理输入的字符串序列,给出单个字符串的结果。请注意,此处的订单不,因为HashMap
未订购。您可能希望使用TreeMap
按键顺序获取值。