Java8新特性之lambda与stream

之所以写博客。也是方便自己以后的查阅与帮助读者解决问题 废话不多说:

User.java

@Data
public class User {
    private int id;
    private String name;
    private int age;
    private String sex;
    private int wage;

    public User(int id, String name, int age, String sex, int wage) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.wage = wage;
    }
}

JavaLambda.java

public class JavaLambda {
    public static void main(String[] args) {
        String[] str={"song","xian","yang","hui","liu","guo"};
        stringArray(str);
        anonymousInnerClass(str);
    }

    //采用Java8新特性 遍历数组与List
    private static void stringArray(String [] str) {
        //将数组转换成List
        List<String> list = Arrays.asList(str);
        //采用Lambda
        list.forEach(s -> {
            System.out.println(s+";");
        });
        System.out.println("---------------------");
        //普通循环的方式
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("Java8排序");
    }

    //匿名内部类采用Java8
    private static void anonymousInnerClass(String [] str) {
        List<String> list = Arrays.asList(str);
        //传统排序
        list.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        System.out.println(list);

        //采用Java8排序
        list.sort((s1,s2)->(s1.compareTo(s2)));
        System.out.println(list);
        System.out.println("-----------------");
    }
}
输出:
song;
xian;
yang;
hui;
liu;
guo;
---------------------
song
xian
yang
hui
liu
guo
Java8排序
[guo, hui, liu, song, xian, yang]
[guo, hui, liu, song, xian, yang]
-----------------

JavaStream.java

@Log4j2
public class JavaStream {
    public static void main(String[] args) {
        User user = new User(1, "song", 21, "女", 1000);
        User user2 = new User(2, "song2", 22, "男", 2000);
        User user3 = new User(3, "song3", 23, "男", 3000);
        User user4 = new User(4, "song4", 24, "女", 4000);
        List<User> userList = new ArrayList();
        userList.add(user2);
        userList.add(user);
        userList.add(user4);
        userList.add(user3);

        //stream 表达式抽取一个字符作为一个集合
        List<Integer> ids = userList.stream().map(User::getAge).collect(Collectors.toList());
        System.out.println(ids);

        //给用户加工资
        Consumer<User> plusWages = u -> u.setWage(u.getWage() + 500);
        userList.forEach(plusWages);

        //Lambda表达式循环打印
        userList.forEach(u -> {
            System.out.println(u);
        });
        System.out.println("-----------------------");
        //过滤一下工资小于3000的人员
        List<User> collect1 = userList.stream().filter(u -> (u.getWage() >= 3000)).collect(Collectors.toList());
        System.out.println(collect1);

        System.out.println("过滤一下工资小于2000且性别是男性");
        //
        Predicate<User> filterWage = u -> (u.getWage() > 2000);
        Predicate<User> filterSex = u -> ("男".equals(u.getSex()));
        List<User> collect2 = userList.stream().filter(filterWage).filter(filterSex).collect(Collectors.toList());
        System.out.println(collect2);

        System.out.println("我只要集中的第一条数据");
        List<User> collect3 = userList.stream().limit(1).collect(Collectors.toList());
        System.out.println(collect3);

        log.info("根据工资比较进行排序");
        List<User> collect4 = userList.stream().sorted(((o1, o2) -> (o1.getWage() - o2.getWage()))).collect(Collectors.toList());
        System.out.println(collect4);
        log.info("根据name排序要前两条");
        List<User> collect5 = userList.stream().sorted((o1, o2) -> (o1.getName().compareTo(o2.getName()))).limit(2).collect(Collectors.toList());
        System.out.println(collect5);

        log.info("工资最低的用户");
        User userMin = userList.stream().min((o1, o2) -> (o1.getWage() - o2.getWage())).get();
        System.out.println(userMin);
        log.info("工资最高的用户");
        User userMax = userList.stream().max((o1, o2) -> (o1.getWage() - o2.getWage())).get();
        System.out.println(userMax);

        log.info("集合对象中name抽取出来进行字符串*拼接");
        String collect6 = userList.stream().map(User::getName).collect(Collectors.joining("*"));
        System.out.println(collect6);
        log.info("集合对象中name抽取出来放进set集合中");
        Set<String> collect7 = userList.stream().map(User::getName).collect(Collectors.toSet());
        System.out.println(collect7);
        log.info("集合对象中name抽取出来放进TreeMap集合中");
        TreeSet<String> collect8 = userList.stream().map(User::getName).collect(Collectors.toCollection(TreeSet::new));
        System.out.println(collect8);

        log.info("所有人wage总和");
        int sum = userList.stream().mapToInt(User::getWage).sum();
        System.out.println(sum);
        log.info("一个集合中的 count min max sum");
        IntSummaryStatistics intSummaryStatistics = userList.stream().mapToInt(User::getWage).summaryStatistics();
        System.out.println(intSummaryStatistics.getMax());
        System.out.println(intSummaryStatistics.getAverage());
        System.out.println(intSummaryStatistics.getCount());
        System.out.println(intSummaryStatistics.getMin());
        System.out.println(intSummaryStatistics.getSum());
        System.out.println(intSummaryStatistics.getClass());
    }
 }
 输出:
 [22, 21, 24, 23]
User(id=2, name=song2, age=22, sex=, wage=2500)
User(id=1, name=song, age=21, sex=, wage=1500)
User(id=4, name=song4, age=24, sex=, wage=4500)
User(id=3, name=song3, age=23, sex=, wage=3500)
-----------------------
[User(id=4, name=song4, age=24, sex=, wage=4500), User(id=3, name=song3, age=23, sex=, wage=3500)]
过滤一下工资小于2000且性别是男性
[User(id=2, name=song2, age=22, sex=, wage=2500), User(id=3, name=song3, age=23, sex=, wage=3500)]
我只要集中的第一条数据
[User(id=2, name=song2, age=22, sex=, wage=2500)]
14:59:13.096 [main] INFO com.huatech.boot.JavaStream - 根据工资比较进行排序
[User(id=1, name=song, age=21, sex=, wage=1500), User(id=2, name=song2, age=22, sex=, wage=2500), User(id=3, name=song3, age=23, sex=, wage=3500), User(id=4, name=song4, age=24, sex=, wage=4500)]
14:59:13.100 [main] INFO com.huatech.boot.JavaStream - 根据name排序要前两条
[User(id=1, name=song, age=21, sex=, wage=1500), User(id=2, name=song2, age=22, sex=, wage=2500)]
14:59:13.100 [main] INFO com.huatech.boot.JavaStream - 工资最低的用户
User(id=1, name=song, age=21, sex=, wage=1500)
14:59:13.100 [main] INFO com.huatech.boot.JavaStream - 工资最高的用户
User(id=4, name=song4, age=24, sex=, wage=4500)
14:59:13.100 [main] INFO com.huatech.boot.JavaStream - 集合对象中name抽取出来进行字符串*拼接
song2*song*song4*song3
14:59:13.104 [main] INFO com.huatech.boot.JavaStream - 集合对象中name抽取出来放进set集合中
[song, song2, song3, song4]
14:59:13.104 [main] INFO com.huatech.boot.JavaStream - 集合对象中name抽取出来放进TreeMap集合中
[song, song2, song3, song4]
14:59:13.104 [main] INFO com.huatech.boot.JavaStream - 所有人wage总和
12000
14:59:13.104 [main] INFO com.huatech.boot.JavaStream - 一个集合中的 count min max sum
4500
3000.0
4
1500
12000
class java.util.IntSummaryStatistics
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveCode.

永远年轻,永远热泪盈眶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值