112二二位


       
       
               

                   

案例描述

 

今天跟着黑马程序员的视频,完成“瑞吉外卖”项目的菜品信息管理模块的时候,遇到了一个比较陌生的写法

 

用到了Java8的新特性 stream().map((item) -> {}).collect()

 
  1. List<DishDto> collect = records.stream().map((item) -> {
  2.    DishDto dishDto = new DishDto();
  3.    BeanUtils.copyProperties(item,dishDto);
  4.    Long categoryId = item.getCategoryId();
  5.    Category category = categoryMapper.selectById(categoryId);
  6.    if (category != null) {
  7.        String categoryName = category.getName();
  8.        dishDto.setCategoryName(categoryName);
  9.    }
  10.    return dishDto;
  11. }).collect(Collectors.toList());
 

 

 

等价写法 

 
  1. List<DishDto> collect = new ArrayList<>();
  2. for (int i = 0; i < records.size(); i++) {
  3.    DishDto dishDto = new DishDto();
  4.    BeanUtils.copyProperties(records.get(i),dishDto);
  5.    Long categoryId = records.get(i).getCategoryId();
  6.    Category category = categoryMapper.selectById(categoryId);
  7.    if (category != null) {
  8.        String categoryName = category.getName();
  9.        dishDto.setCategoryName(categoryName);
  10.    }
  11.    collect.add(dishDto);
  12. }
  13. dishDtoPage.setRecords(collect);
 

其实,说白了,我们就是要干一件事,就是把records这个数组遍历一下,把 records 里面的属性字段赋值给dishDto, 并且添加一些“内容”。

 

stream().map().collect() 

 

抽离出本质

 
  1. mylist.stream().map((item)->{
  2.     return item;
  3. }).collect(Collectors.toList());
 

steam()

 

无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。

 

为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。

 

惰式执行。stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。

 

可消费性。stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。

 

map()

 

map 方法用于映射每个元素到对应的结果

 
  1. List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
  2. List<Integer> squares = numbers.stream().map((i) -> {
  3.    i = i*i;
  4.    return i;
  5. }).distinct().collect(Collectors.toList());
  6. System.out.println(squares);
  7. // [9, 4, 49, 25]
 

简洁一点可以这样子:省略掉 ()-{}

 
  1. List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
  2. List<Integer> squares = numbers.stream().map( i -> i*i).distinct()
  3.        .collect(Collectors.toList());
  4. System.out.println(squares);
 

如果不理解,我们可以再看一个例子!

 

filter()

 

filter 方法用于通过设置的条件过滤出元素

 
  1. List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
  2. // 获取空字符串的数量
  3. long count = strings.stream().filter(string -> string.isEmpty()).count();
  4. // 2
  5. System.out.println(count);
 

更多的例子,在菜鸟里面都有,就不搬了...... 

 

Java 8 Stream | 菜鸟教程 (runoob.com)icon-default.png?t=M85Bhttps://www.runoob.com/java/java8-streams.html

 

.collect(Collectors.toList())

 

将流中的所有元素导出到一个列表( List )

 
  1. Stream<String> s = Stream.of("Geeks","for","GeeksforGeeks","Geeks Classes");
  2. List<String> myList = s.collect(Collectors.toList());
  3. // [Geeks, for, GeeksforGeeks, Geeks Classes]
  4. System.out.println(myList);

               

       

你可能感兴趣的:(tensorflow,人工智能,python)