了解常见的通用签名:地图

时间:2016-02-01 19:35:30

标签: java generics java-8 java-stream

Stream上的地图操作具有以下签名。

Stream<R> map(Function<? super T,? extends R> mapper)

实现是::

public static void main(String[] args) {
        List<Double> someDoubles = Arrays.asList(2.3, 3.5, 6.8);
        List<String> words = Arrays.asList("dog", "elephant", "peacock");
        List<Manager> mans = Arrays.asList(
                new Manager("John", 100000, 2000, 10, 15),
                new Manager("Steve", 120000, 1998, 2, 17));
        List<Number> numbers =
                //here, type R is Number and word.length() is of type Integer
                words.stream().map(word -> word.length())
                              .collect(Collectors.toList());
        numbers.addAll(someDoubles);
                //here, type T is Manager, and Employee is supertype
        numbers.addAll(mans.stream().map((Employee e) -> e.getSalary())
                           .collect(Collectors.toList()));
        System.out.println(numbers);
    }

我不知道这个地图程序是如何工作的。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

你感到困惑,因为&#34; map&#34; Java中有两个(至少)含义。较旧的含义是参考接口java.util.Map。这是一种存储某种值并由密钥索引的数据结构。它的签名是(或多或少)interface Map<K,V> {...}

另一个含义是Java 8中的新内容。它是map()上的Stream方法。它将Stream中的元素从一个事物转换为另一个事物。在您的第一个示例中,它首先将Stream个单词转换为Integers的流,表示每个单词的长度。在您的第二个中,它会将Stream Employee转换为代表其工资的Doubles流。

示例代码只显示了如何将各种事物(或#34;映射&#34;)转换为数字。