黑猴子的家:Java 8 -> Stream 中间操作(映射)

本文深入探讨了Java Stream API中的惰性求值机制,以及map和flatMap等中间操作如何用于数据转换。通过具体示例,展示了如何使用map进行单一类型映射,以及flatMap处理复杂数据结构,实现高效的数据流处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、概念

多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性全部处理,称为“惰性求值”。

2、映射

13909371-8d1d5dfa4e1b1b9a.png

3、map

package com.yinggu.demo11;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
import org.junit.Test;
import com.yinggu.data.EmployeeData;
import com.yinggu.domain.Employee;


 * @author 黑猴子的家 
 * https://www.jianshu.com/u/37fd8e2dff4c

public class TestStreamMiddle {
      List<Employee> list = EmployeeData.getData();
      // 映射map
      @Test
      public void testmap1() {
            // 1.获取Stream对象
            Stream<Employee> streamlist = list.stream();
            // 2.中间操作
            // 2-1.map:将每一个元素 映射成一个普通类型的元素
            Stream<String> mapStream = streamlist.map(Employee::getName);
            // Stream<Integer> map = streamlist.map(Employee::getAge);
            // 3.终止操作
            mapStream.forEach(System.out::println);
      }
}

4、flatMap1

package com.yinggu.demo11;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
import org.junit.Test;
import com.yinggu.data.EmployeeData;
import com.yinggu.domain.Employee;

 * @author 黑猴子的家 
 * https://www.jianshu.com/u/37fd8e2dff4c

public class TestStreamMiddle {
      List<Employee> list = EmployeeData.getData();
      // 映射 flatMap
      @Test
      public void testmap2() {
            // 1.获取Stream对象
            Stream<Employee> streamlist = list.stream();
            // 2.中间操作
            Stream<Object> mapstream = 
                  streamlist.flatMap(TestStreamMiddle::fromEmployeeToStream);
            // 3.终止操作
            mapstream.forEach(System.out::println);
      }
      public static Stream<Object> fromEmployeeToStream(Employee e) {
            return Stream.of(e.getId(), e.getName(), e.getAge(), e.getSalary());
      }
}

5、flatMap2

package com.yinggu.demo11;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
import org.junit.Test;
import com.yinggu.data.EmployeeData;
import com.yinggu.domain.Employee;

 * @author 黑猴子的家 
 * https://www.jianshu.com/u/37fd8e2dff4c

public class TestStreamMiddle {
      List<Employee> list = EmployeeData.getData();
      // 映射flatMap
      @Test
      public void testmap3() {
            // 定义一个集合
            List<String> list = new ArrayList<>();
            list.add("john");
            list.add("lucy");
            list.add("lily");
            // 获取Stream对象
            Stream<String> streamlist = list.stream();
            // 映射:将每一个元素 映射成char类型的Stream
            Stream<Character> flatmapStream = 
                        streamlist.flatMap(TestStreamMiddle::fromStreamToChar);
            // 终止操作
            flatmapStream.forEach(System.out::println);
      }

      public static Stream<Character> fromStreamToChar(String str) {
            char[] charArray = str.toCharArray();
            List<Character> list = new ArrayList<>();
            for (int i = 0; i < charArray.length; i++) {
                  list.add(charArray[i]);
            }
            return list.stream();
      }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值