stream映射与排序——Java8新特性

399 篇文章 12 订阅
package com.example.demo.lambdaStreamAPI;

import com.example.demo.lambda.Employee;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/*
 * 一、 Stream 的操作步骤
 * 1. 创建 Stream
 * 2. 中间操作
 * 3. 终止操作
 */
public class TestStreamAPI1 {

    List<Employee> emps = Arrays.asList(
            new Employee("李四", 59, 6666.66),
            new Employee("张三", 18, 9999.99),
            new Employee("王五", 28, 3333.33),
            new Employee("赵六", 8, 7777.77),
            new Employee("赵六", 8, 7777.77),
            new Employee("赵六", 8, 7777.77),
            new Employee("田七", 38, 5555.55)
    );

    //2. 中间操作
	/*
	  映射:
		map:接收Lambda,将元素转换成其他形式或提取信息。
			 接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
		flatMap:接收一个函数作为参数,将流中的每个值都换成另一个流,
			     然后把所有流连接成一个流。
	 */
    @Test
    public void test1(){
        Stream<String> str = emps.stream()
                .map((e) -> e.getName());

        System.out.println("-------------------------------------------");

        List<String> strList = Arrays.asList("aaa", "bbb", "ccc", "ddd", "eee");

        //map
        Stream<String> stream = strList.stream()
                .map(String::toUpperCase);

        stream.forEach(System.out::println);

        Stream<Stream<Character>> stream2 = strList.stream()
                //{{a,a,a},{b,b,b},{c,c,c}......} 即: {{流},{流},{流}......}流
                .map(TestStreamAPI1::filterCharacter);

        stream2.forEach((sm) -> {
            sm.forEach(System.out::println);
        });

        System.out.println("---------------------------------------------");

        //flatMap
        Stream<Character> stream3 = strList.stream()
                //{a,a,a,b,b,b,c,c,c......} 即: {元素......}流
                .flatMap(TestStreamAPI1::filterCharacter);

        stream3.forEach(System.out::println);
    }

    //把一个字符串中的每个字符取出并放到集合中
    public static Stream<Character> filterCharacter(String str){
        List<Character> list = new ArrayList<>();

        for (Character ch : str.toCharArray()) {
            list.add(ch);
        }

        return list.stream();
    }

    //map、flatMap和集合的 add(Object obj)、addAll(Collection coll) 类似
    @Test
    public void test7() {
        List<String> list = Arrays.asList("aaa", "bbb", "ccc");
        System.out.println(list);

        List list1 = new ArrayList();
        list1.add(11);
        list1.add(22);
        //list1.add(list);
        System.out.println(list1);

        list1.addAll(list);
        System.out.println(list1);

        //注:为什么直接打印java集合对象打印出来的不是哈希码,而是里面存储值
        //原因:以ArrayList为例,它的父类AbstractList的父类AbstractCollection里面重写了toString()方法
    }

    /*
        sorted()——自然排序
        sorted(Comparator com)——定制排序
     */
    @Test
    public void test2(){
        emps.stream()
                .map(Employee::getName)
                .sorted()
                .forEach(System.out::println);

        System.out.println("------------------------------------");

        emps.stream()
                .sorted((x, y) -> {
                    if(x.getAge() == y.getAge()){
                        return x.getName().compareTo(y.getName());
                    }else{
                        return Integer.compare(x.getAge(), y.getAge());
                    }
                }).forEach(System.out::println);
    }
}
AbstractCollection抽象类的toString()方法源码:
public String toString() {
	Iterator<E> it = iterator();
	if (! it.hasNext())
		return "[]";

	StringBuilder sb = new StringBuilder();
	sb.append('[');
	for (;;) {
		E e = it.next();
		sb.append(e == this ? "(this Collection)" : e);
		if (! it.hasNext())
			return sb.append(']').toString();
		sb.append(',').append(' ');
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值