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);
}
我不知道这个地图程序是如何工作的。有人可以解释一下吗?
答案 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;)转换为数字。