8个Lambda表达式的练习题

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.*;

public class Exercise {

    public static void main(String[] args) {
        Trader raoul = new Trader("Raoul", "Cambridge");
        Trader mario = new Trader("Mario", "Milan");
        Trader alan = new Trader("Alan", "Cambridge");
        Trader brian = new Trader("Brian", "Cambridge");

        List<Transaction> transactions = Arrays.asList(
                new Transaction(brian, 2011, 300),
                new Transaction(raoul, 2012, 1000),
                new Transaction(raoul, 2011, 400),
                new Transaction(mario, 2012, 710),
                new Transaction(mario, 2012, 700),
                new Transaction(alan, 2012, 950)
        );

        // 找出2011年发生的所有交易,并按交易额排序
        transactions.stream()
                .filter(tran -> 2011 == tran.getYear())
                .sorted(comparing(Transaction::getValue))
                .collect(Collectors.toList());

        // 交易员在哪些不同的城市工作过
        transactions.stream()
                .map(transaction -> transaction.getTrader().getName() + "---" + transaction.getTrader().getCity())
                .distinct()
                .collect(toList());

        // 查找所有来自剑桥的交易员,并按姓名排序
        transactions.stream()
                .map(Transaction::getTrader)
                .filter(trader -> "Cambridge".equals(trader.getCity()))
                .sorted(comparing(Trader::getName))
                .distinct()
                .collect(toList());

        // 返回所有交易员的姓名字符串,并按字母顺序排序
        String reduce = transactions.stream()
                .map(transaction -> transaction.getTrader().getName())
                .distinct()
                .sorted()
                .reduce("", (n1, n2) -> n1 + n2);

        // 有没有交易员在米兰工作的?
     // .anyMatch表示一组数据中,是否包含一条或多条该数据
boolean anyMatch = transactions.stream() .anyMatch(transaction -> transaction.getTrader().getCity().equals("Milan")); System.out.println(anyMatch ? "有交易员在米兰" : "没有"); // 打印生活在剑桥的交易员的所有交易额 Map<String, Integer> cambridge = transactions.stream() .filter(transaction -> transaction.getTrader().getCity().equals("Cambridge")) .collect(groupingBy(transaction -> transaction.getTrader().getName(), summingInt(Transaction::getValue))); System.out.println(cambridge); // 所有交易中,最高的交易额是多少 transactions.stream() .map(Transaction::getValue) .reduce(0, Integer::max); // 找到交易额最小的交易 transactions.stream() .map(Transaction::getValue) .reduce(Integer::min).get(); } }

转载于:https://www.cnblogs.com/Deters/p/11151184.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java lambda表达式习题可以通过使用Lambda表达式和方法引用来改写给定的代码,以实现相同的效果。 第一个习题是关于使用Lambda表达式实现多线程。原来的代码中使用了匿名内部类来实现Runnable接口,可以改写成使用Lambda表达式的形式: ``` new Thread(() -> System.out.println("do something...")).start(); ``` 这里使用了Lambda表达式替代了匿名内部类,使得代码更简洁。 第二个习题是关于构造方法引用。原来的代码中使用了lambda表达式来创建一个新的字符串对象,可以改写成使用构造方法引用的形式: ``` String::new ``` 这里使用了构造方法引用的语法形式,等价于lambda表达式`() -> new String()`,都是用来创建一个新的字符串对象。 第三个习题是关于静态方法引用。原来的代码中使用了匿名内部类来调用静态方法,可以改写成使用静态方法引用的形式: ``` String::valueOf ``` 这里使用了静态方法引用的语法形式,等价于lambda表达式`(s) -> String.valueOf(s)`,都是用来调用String类的静态valueOf方法。 因此,以上是关于Java lambda表达式习题的改写方法,可以使用Lambda表达式和方法引用来简化代码,并实现相同的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java Lanmbda表达式练习题](https://blog.csdn.net/weixin_41712089/article/details/103036993)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值