Java stream常用实例代码

目录

  • 定义对象实体
  • 场景一 根据属性过滤对象
  • 场景二 提取对象中的属性
  • 场景三 按对象属性分组
  • 场景四、对象列表转换为Map
  • 场景五、列表去重

定义对象实体

package com.elon.model;

/**
 * 简单用户实体类
 *
 * @author elon
 */
public class User {

    /**
     * 用户账号
     */
    private String account = "";

    /**
     * 用户名
     */
    private String name = "";

    /**
     * 年龄
     */
    private int age = 0;

    public User() {

    }

    public User(String account, String name, int age){
        this.account = account;
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

场景一 根据属性过滤对象

    /**
     * 使用流过滤数据.
     *
     * @author elon
     */
    public static void filterUser(List userList) {
        // 1、过滤数据
        List filterUserList = userList.stream().filter(u->u.getAge() > 12).collect(Collectors.toList());

        // 2、打印过滤结果数量
        System.out.printf("过滤后的数据:%s%n", new Gson().toJson(filterUserList));
    }

场景二 提取对象中的属性

    /**
     * 提取对象中的某个属性值。
     *
     * @param userList 用户对象列表
     * @author elon
     */
    public static void distillField(List userList) {
        List nameList = userList.stream().map(User::getName).collect(Collectors.toList());

        // 打印提取的用户名
        System.out.printf("打印提取的用户名:%s%n", new Gson().toJson(nameList));
    }

场景三 按对象属性分组

基于对象中的某个属性分组,属性值相同的对象放一组。

    /**
     * 根据某个属性对对象做分组.
     *
     * @param userList 用户列表
     * @auhtor elon
     */
    public static void groupUser(List userList) {
        Map> userMap = userList.stream().collect(Collectors.groupingBy(User::getAge));

        System.out.printf("分组后的对象:%s\n", new Gson().toJson(userMap));
    }

场景四、对象列表转换为Map

将list转换为Map的目的是为了在后面可以快速查询。

package com.elon.service;

import com.elon.model.User;
import com.google.gson.Gson;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Transform2MapClass {

    /**
     * 提取列表中的对象属性,转换为Map
     *
     * @param userList 用户对象列表
     * @author elon
     */
    public static void transform2Map(List userList) {
        Map account2AgeMap = userList.stream().collect(Collectors.toMap(
                User::getAccount, User::getAge, (k1,k2)->k1, HashMap::new));
        System.out.printf("提取的用户账号和年龄键值对:%s\n", new Gson().toJson(account2AgeMap));

        Map account2UserMap = userList.stream().collect(Collectors.toMap(User::getAccount, user -> user));
        System.out.printf("提取的用户账号和对象键值对:%s\n", new Gson().toJson(account2UserMap));
    }
}

场景五、列表去重

    /**
     * 列表去重.
     *
     * @param userList 用户列表
     * @author elon
     */
    public static void distinct(List userList) {

        List distinctUserList = userList.stream().distinct().collect(Collectors.toList());

        System.out.printf("打印去重后的用户信息:%s%n", new Gson().toJson(distinctUserList));
    }

对象使用的是equals方法比较去重。如果是对象列表去重,对象类需要改写hashCode和equals方法。

你可能感兴趣的:(Java开发技术)