使用 lambda 将 Map 格式设置为字符串

2022-08-31 19:49:05

我有一个包含键和值的地图。我需要用这种特定的格式将其转换为:.现在,我使用格式化每个元素,将它们收集到一个列表中,然后执行String.join();IntegerStringkey1 - val1, key2 - val2, key3 - val3forEach

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进行一些练习。


答案 1

我想你正在寻找这样的东西:

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()将该条目流转换为“键 - 值”形式的字符串流
  • collect(Collectors.joining(", "))将流中的所有条目联接到单个字符串中,用作分隔符。Collectors.joining是一种返回收集器的方法,它可以处理字符串的输入序列,给出单个字符串的结果。", "

请注意,此处保证订单,因为未订购。您可能希望使用 来按键顺序获取值。HashMapTreeMap


答案 2