使用Java 8 Streams将更改应用于Map值

时间:2017-10-12 08:02:54

标签: collections filter java-8 java-stream

我想使用java 8更改Map值。

Map<String, String> attributeMap = new TreeMap<>();
attributeMap.put("C","FIRSTNAMe");
attributeMap.put("C3","1111");
attributeMap.put("C4","ABCNAMe");

更改后,作为字符串的输出应该看起来像

c='FIRSTNAMe',c3=111,c4='ABCNAMe' 

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:1)

你可以创建一个方法transform并传递一个Predicate,以便何时引用:

public static String tranform(Map<String, String> attributeMap, Predicate<String> predicate) {
    return attributeMap.entrySet()
            .stream()
            .collect(Collectors.mapping(e -> {
                return e.getKey().toLowerCase() + "=" +
                        (predicate.test(e.getValue()) ? "'" + e.getValue() + "'" : e.getValue());
            }, Collectors.joining(",")));
}

并称之为:

String result = tranform(attributeMap, "1111"::equals);
System.out.println(result); // c=FIRSTNAMe,c3='1111',c4=ABCNAMe

如果您只想引用数字,请使用其他Predicate

Predicate<String> predicate = s -> s.matches("\\d+");
String result = tranform(attributeMap, predicate);