java8 stream 排序(金钱,日期,年龄),过滤,最大值,最小值。

java8 stream 排序(金钱,日期,年龄),过滤,最大值,最小值。

实体类

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Builder;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
@Data
@Builder
class Person {
    private String name;
    private Integer age;
    private BigDecimal salary;
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date birthday;
}

排序,过滤,最大值,最小值。

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.stream.Collectors;

public class Java8StreamTest {

    /**
     * 常用排序手段: 根据date排序, 根据number排序, 根据money排序
     */
    public static void testStream() throws ParseException {
        LocalDateTime ldt = LocalDateTime.now();
        LocalDateTime with = ldt.with(TemporalAdjusters.lastDayOfMonth());
        Date date = Date.from(with.atZone(ZoneId.systemDefault()).toInstant());
        LocalDateTime parse = LocalDateTime.parse("2021-01-02 21:21:21", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date1 = sdf.parse("2021-01-02 21:32:32");
        Date date2 = sdf.parse("2021-07-05 12:32:45");
        Date date3 = sdf.parse("2020-09-18 23:21:21");
        Date date4 = sdf.parse("2018-05-02 19:23:01");
        Date date5 = sdf.parse("2019-11-25 03:54:12");
        List<Person> personList = new ArrayList<>();
        Person tom = Person.builder()
                .name("tom")
                .age(38)
                .salary(new BigDecimal("11123.00"))
                .birthday(date1).build();
        Person jerry = Person.builder()
                .name("jerry")
                .age(25)
                .salary(new BigDecimal("6464.00"))
                .birthday(date2).build();
        Person jack = Person.builder()
                .name("jack")
                .age(49)
                .salary(new BigDecimal("9797.00"))
                .birthday(date3).build();
        Person rose = Person.builder()
                .name("rose")
                .age(67)
                .salary(new BigDecimal("8098.00"))
                .birthday(date4).build();
        Person shel = Person.builder()
                .name("shel")
                .age(52)
                .salary(new BigDecimal("94465165.00"))
                .birthday(date5).build();
        personList.add(tom);
        personList.add(tom);
        personList.add(jerry);
        personList.add(jack);
        personList.add(rose);
        personList.add(shel);
        personList.sort((o1, o2) -> o1.getSalary().compareTo(o2.getSalary()));
        System.out.println("根据金钱升序:" + personList);
        personList.sort((o1, o2) -> -1 * o1.getSalary().compareTo(o2.getSalary()));
        System.out.println("根据金钱降序:" + personList);

        personList.sort(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge().compareTo(o2.getAge());
            }
        });
        System.out.println("根据年龄升序:" + personList);

        personList.sort(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getBirthday().compareTo(o2.getBirthday());
            }
        });
        System.out.println("根据日期升序:" + personList);

        List<Person> collect = personList.stream().distinct().collect(Collectors.toList());
        System.out.println("java8根据对象去重:" + collect);

        List<Person> collect1 = personList.stream().sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList());
        System.out.println("java8根据年龄升序:" + collect1);

        List<Person> collect2 = personList.stream().sorted(Comparator.comparing(Person::getSalary).reversed()).collect(Collectors.toList());
        System.out.println("java8根据金钱降序:" + collect2);

        List<Person> collect3 = personList.stream().distinct().sorted(Comparator.comparing(Person::getBirthday).thenComparing(Person::getSalary)).collect(Collectors.toList());
        System.out.println("java8先去重再根据日期排序,再根据年龄排序:" + collect3);


        List<Person> collect4 = personList.stream().filter(person -> person.getName() == "tom" || person.getName() == "jerry").collect(Collectors.toList());
        System.out.println("java8获取符合条件的变量的对象:" + collect4);

        // 相当于获取数据库表的列
        List<String> collect5 = personList.stream().map(person -> person.getName() + " - " + person.getAge()).collect(Collectors.toList());
        System.out.println("java8获取所有的对象的属性组合:" + collect5);
        List<BigDecimal> collect6 = personList.stream().map(person -> person.getSalary()).collect(Collectors.toList());
        System.out.println("java8获取所有对象的某个属性(salary):" + collect6);
        List<BigDecimal> collect7 = collect6.stream().skip(1).collect(Collectors.toList());
        System.out.println("将第一个元素跳过: " + collect7);
        BigDecimal max = collect6.stream().max(BigDecimal::compareTo).get();
        System.out.println("获取最大的值:" + max);
        BigDecimal min = collect6.stream().min(BigDecimal::compareTo).get();
        System.out.println("获取最小的值:" + min);
        BigDecimal sum = collect6.stream().reduce(BigDecimal::add).get();
        System.out.println("获取总和:" + sum);
        BigDecimal min2 = collect6.stream().reduce(BigDecimal.valueOf(0), BigDecimal::min);
        System.out.println("最小值:" + min2);
        BigDecimal max2 = collect6.stream().reduce(BigDecimal.valueOf(0), BigDecimal::max);
        System.out.println("最大值:" + max2);

    }
    public static void main(String[] args) throws ParseException {
        testStream();
    }
}

输出

根据金钱升序:[Person(name=jerry, age=25, salary=6464.00, birthday=Mon Jul 05 12:32:45 CST 2021), Person(name=rose, age=67, salary=8098.00, birthday=Wed May 02 19:23:01 CST 2018), Person(name=jack, age=49, salary=9797.00, birthday=Fri Sep 18 23:21:21 CST 2020), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=shel, age=52, salary=94465165.00, birthday=Mon Nov 25 03:54:12 CST 2019)]
根据金钱降序:[Person(name=shel, age=52, salary=94465165.00, birthday=Mon Nov 25 03:54:12 CST 2019), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=jack, age=49, salary=9797.00, birthday=Fri Sep 18 23:21:21 CST 2020), Person(name=rose, age=67, salary=8098.00, birthday=Wed May 02 19:23:01 CST 2018), Person(name=jerry, age=25, salary=6464.00, birthday=Mon Jul 05 12:32:45 CST 2021)]
根据年龄升序:[Person(name=jerry, age=25, salary=6464.00, birthday=Mon Jul 05 12:32:45 CST 2021), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=jack, age=49, salary=9797.00, birthday=Fri Sep 18 23:21:21 CST 2020), Person(name=shel, age=52, salary=94465165.00, birthday=Mon Nov 25 03:54:12 CST 2019), Person(name=rose, age=67, salary=8098.00, birthday=Wed May 02 19:23:01 CST 2018)]
根据日期升序:[Person(name=rose, age=67, salary=8098.00, birthday=Wed May 02 19:23:01 CST 2018), Person(name=shel, age=52, salary=94465165.00, birthday=Mon Nov 25 03:54:12 CST 2019), Person(name=jack, age=49, salary=9797.00, birthday=Fri Sep 18 23:21:21 CST 2020), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=jerry, age=25, salary=6464.00, birthday=Mon Jul 05 12:32:45 CST 2021)]
java8根据对象去重:[Person(name=rose, age=67, salary=8098.00, birthday=Wed May 02 19:23:01 CST 2018), Person(name=shel, age=52, salary=94465165.00, birthday=Mon Nov 25 03:54:12 CST 2019), Person(name=jack, age=49, salary=9797.00, birthday=Fri Sep 18 23:21:21 CST 2020), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=jerry, age=25, salary=6464.00, birthday=Mon Jul 05 12:32:45 CST 2021)]
java8根据年龄升序:[Person(name=jerry, age=25, salary=6464.00, birthday=Mon Jul 05 12:32:45 CST 2021), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=jack, age=49, salary=9797.00, birthday=Fri Sep 18 23:21:21 CST 2020), Person(name=shel, age=52, salary=94465165.00, birthday=Mon Nov 25 03:54:12 CST 2019), Person(name=rose, age=67, salary=8098.00, birthday=Wed May 02 19:23:01 CST 2018)]
java8根据金钱降序:[Person(name=shel, age=52, salary=94465165.00, birthday=Mon Nov 25 03:54:12 CST 2019), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=jack, age=49, salary=9797.00, birthday=Fri Sep 18 23:21:21 CST 2020), Person(name=rose, age=67, salary=8098.00, birthday=Wed May 02 19:23:01 CST 2018), Person(name=jerry, age=25, salary=6464.00, birthday=Mon Jul 05 12:32:45 CST 2021)]
java8先去重再根据日期排序,再根据年龄排序:[Person(name=rose, age=67, salary=8098.00, birthday=Wed May 02 19:23:01 CST 2018), Person(name=shel, age=52, salary=94465165.00, birthday=Mon Nov 25 03:54:12 CST 2019), Person(name=jack, age=49, salary=9797.00, birthday=Fri Sep 18 23:21:21 CST 2020), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=jerry, age=25, salary=6464.00, birthday=Mon Jul 05 12:32:45 CST 2021)]
java8获取符合条件的变量的对象:[Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=tom, age=38, salary=11123.00, birthday=Sat Jan 02 21:32:32 CST 2021), Person(name=jerry, age=25, salary=6464.00, birthday=Mon Jul 05 12:32:45 CST 2021)]
java8获取所有的对象的属性组合:[rose - 67, shel - 52, jack - 49, tom - 38, tom - 38, jerry - 25]
java8获取所有对象的某个属性(salary):[8098.00, 94465165.00, 9797.00, 11123.00, 11123.00, 6464.00]
将第一个元素跳过: [94465165.00, 9797.00, 11123.00, 11123.00, 6464.00]
获取最大的值:94465165.00
获取最小的值:6464.00
获取总和:94511770.00
最小值:0
最大值:94465165.00
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值