Java 8 Streams地图和过滤器之间的区别

时间:2018-02-08 12:07:36

标签: java collections java-stream

两种方法的结果相同,这是最佳实践。我是java的新蜜蜂。我对stream.map和stream.filter

有点困惑
List<String> alpha =
        Arrays.asList("a", "b", "csddddddddddd",
                "d", "ssdddddddddd", "sw", "we", "wew");

// Java 8
List<String> collect = alpha.stream()
        .map(String::toUpperCase)
        .collect(Collectors.toList());

List<Integer> collect2 = alpha.stream()
        .map(s -> s.length())
        .collect(Collectors.toList());

List<Integer> collect3 = collect2.stream()
        .filter(s -> s > 10)
        .collect(Collectors.toList());

List<Integer> collect4 = collect2.stream()
        .map(s -> {
            Integer temp = 0;
            if (s > 10) {
                temp = s;
            }
            return temp;
        })
        .filter(s -> s > 10)
        .collect(Collectors.toList());

两个List的结果相同:

[13, 12]
[13, 12]

什么是最好的方法。在这方面,最好的方法是什么。

1 个答案:

答案 0 :(得分:3)

如果您想按某种条件过滤Stream的元素(即删除不满足条件的元素),请使用filter,而不是map

map的目的是将一种类型的元素转换为另一种类型的元素。

您在collect3collect4中获得相同结果的唯一原因是,在map中应用collect4后,您应用了一个过滤器,该过滤器将删除所有0 map.map(s ->{ Integer temp = 0;if(s>10) {temp=s;} return temp;})生成的1}}。

整个var oField = sap.ui.getCore().byId('IdOfTheFieldAtTheDialog'); var sValue = oField.getValue(); 电话是多余的。这是编写代码的一种非常难以理解和低效的方式。