Java 8映射过滤和排序

时间:2017-08-30 02:36:08

标签: java dictionary filter java-8 java-stream

我想将此示例迁移到Java 8:

change event listener

正确输出:

Map<String, String> data = new HashMap<String, String>() {{
    put("name", "Middle");
    put("prefix", "Front");
    put("postfix", "Back");
}};

    String title = "";
    if (data.containsKey("prefix")) {
    title += data.get("prefix");
}

if (data.containsKey("name")) {
    title += data.get("name");
}

if (data.containsKey("postfix")) {
    title += data.get("postfix");
}

我尝试使用entryset - &gt;流,但它没有按正确的顺序返回。

FrontMiddleBack

输出:

String titles = macroParams.entrySet().stream()
        .filter(map -> "name".equals(map.getKey()) || "postfix".equals(map.getKey()) || "prefix".equals(map.getKey()))
        .sorted()
        .map(Map.Entry::getValue)
        .collect(Collectors.joining());

我可以使用Java 8获得相同的结果吗?

2 个答案:

答案 0 :(得分:9)

IMO,这里的Streams有点矫枉过正。但是您仍然可以使用Java {8 {3}}来使用Java 8。

String title = data.getOrDefault("prefix", "")
        + data.getOrDefault("name", "")
        + data.getOrDefault("postfix", "");

答案 1 :(得分:5)

您可以流式传输所需的键并加入存在的值:

String title = Stream.of("prefix", "name", "postfix")
        .filter(data::containsKey)
        .map(data::get)
        .collect(joining());