首页 > 其他分享 >Stream API的练习题

Stream API的练习题

时间:2022-09-07 14:34:46浏览次数:104  
标签:练习题 Cambridge stream Stream Trader API Transaction Test transactionList

题目:

  1. 找出2011年发生的所有交易,并按交易额排序(从高到低)。

  2. 交易员都在哪些不同的城市工作过?

  3. 查找所有来自Cambridge的交易员,并按姓名排序。

  4. 返回所有交易员的姓名字符串,按字母顺序排序。

  5. 有没有交易员在Milan工作

  6. 打印生活在Cambridge的交易员的所有交易额。

  7. 所有的交易额中,最高的交易额是多少?

  8. 所有的交易额中,找到交易额最小的交易

一、代码结构:

com
└── example
    └── one
        ├── MainApp.java
        ├── Trader.java
        └── Transaction.java

二、案例所需的数据和实体类:

  • com.example.one包路径下,创建Trader.java实体类。

package com.example.one;
​
@Data //省略封装方法,构造方法,equals和hashcode,toString
public class Trader {
    private String name;
    private String city;
​
​
    public Trader() {
    }
    public Trader(String name, String city) {
        this.name = name;
        this.city = city;
    }
}
  • com.example.one包路径下,创建Transaction.java实体类。

package com.example.one;
​
@Data
public class Transaction {
    private Trader trader;
    private Integer year;
    private Integer value;
​
​
    public Transaction() {
    }
    public Transaction(Trader trader, Integer year, Integer value) {
        this.trader = trader;
        this.year = year;
        this.value = value;
    }
}
  • com.example.one包路径下,创建MainApp.java测试类。

package com.example.one;
​
public class MainApp {
    private Trader raoul = new Trader("Raoul", "Cambridge");
    private Trader mario = new Trader("Mario", "Milan");
    private Trader alan = new Trader("Alan", "Cambridge");
    private Trader brian = new Trader("Brian", "Cambridge");
​
    private List<Transaction> transactionList = 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)
    );
    
    //TODO ... 待添加的方法...
}

三、使用Stream API提供的方法,解决问题:#

题目一:
  • 找出2011年发生的所有交易,并按交易额排序(从高到低)。

/**
 * [
 *     Transaction(trader=Trader(name=Raoul, city=Cambridge), year=2011, value=400), 
 *     Transaction(trader=Trader(name=Brian, city=Cambridge), year=2011, value=300)
 * ]
 */
@Test
void test_01 () {
    List<Transaction> list = transactionList.stream()
            .filter(item -> item.getYear().equals(2011))
            .sorted((e1, e2) -> e2.getValue().compareTo(e1.getValue()))
            .collect(Collectors.toList());
    System.out.println(list);
}
题目二:
  • 交易员都在哪些不同的城市工作过?

/**
 * [Cambridge, Milan]
 */
@Test
void test_01 () {
    List<String> list = transactionList.stream()
            .map(Transaction::getTrader).map(Trader::getCity)
            .distinct()
            .collect(Collectors.toList());
    System.out.println(list);
}
题目三:
  • 查找所有来自Cambridge的交易员,并按姓名排序。

/**
 * [
 *     Trader(name=Alan, city=Cambridge), 
 *     Trader(name=Brian, city=Cambridge), 
 *     Trader(name=Mario, city=Milan), 
 *     Trader(name=Raoul, city=Cambridge)
 * ]
 */
@Test
void test_01 () {
    List<Trader> list = transactionList.stream()
            .map(Transaction::getTrader)
            .distinct()
            .sorted((e1, e2) -> e1.getName().compareTo(e2.getName()))
            .collect(Collectors.toList());
    System.out.println(list);
}
题目四:
  • 返回所有交易员的姓名字符串,按字母顺序排序。

实现方式一:
/**
 * [Alan, Brian, Mario, Raoul]
 */
@Test
void test_01 () {
    List<String> list = transactionList.stream()
            .map(Transaction::getTrader).map(Trader::getName)
            .distinct()
            .sorted(String::compareTo)
            .collect(Collectors.toList());
    System.out.println(list);
}
实现方式二:
/**
 * AlanBrianMarioRaoul
 */
@Test
void test_01 () {
    String concatStr = transactionList.stream()
            .map(Transaction::getTrader).map(Trader::getName)
            .distinct()
            .sorted(String::compareTo)
            .reduce("", String::concat);
    System.out.println(concatStr);
}
实现方式三:
/**
 * ABMRaaaaiillnnoorru
 */
@Test
void test_01() {
    String concatStr = transactionList.stream()
            .map(Transaction::getTrader).map(Trader::getName)
            .distinct()
            .flatMap(this::filterCharacter)
            .sorted(String::compareTo)
            .reduce("", String::concat);
    System.out.println(concatStr);
}
​
/**
 * 将字符串拆分,一个字符为一个字符串的流。
 */
private Stream<String> filterCharacter(String str) {
    List<String> list = new ArrayList<>();
    for (char ch : str.toCharArray()) {
        list.add(String.valueOf(ch));
    }
    return list.stream();
}
题目五:
  • 有没有交易员在Milan工作。

/**
 * [Trader(name=Mario, city=Milan)]
 */
@Test
void test_01() {
    List<Trader> list = transactionList.stream()
            .map(Transaction::getTrader)
            .distinct()
            .filter(item -> item.getCity().equals("Milan"))
            .collect(Collectors.toList());
    System.out.println(list);
}
题目六:
  • 打印生活在Cambridge的交易员的所有交易额。

实现方式一:
/**
 * 2650
 */
@Test
void test_01() {
    Integer sum = transactionList.stream()
            .filter(item -> item.getTrader().getCity().equals("Cambridge"))
            .collect(Collectors.summingInt(Transaction::getValue));
    System.out.println(sum);
}
实现方式二:
/**
 * 2650
 */
@Test
void test_01() {
    Integer sum = transactionList.stream()
            .filter(item -> item.getTrader().getCity().equals("Cambridge"))
            .map(Transaction::getValue)
            .reduce(0, Integer::sum);
    System.out.println(sum);
}
题目七:
  • 所有的交易额中,最高的交易额是多少?

实现方式一:
/**
 * Optional[1000]
 */
@Test
void test_01() {
    Optional<Integer> max = transactionList.stream()
            .map(Transaction::getValue)
            .collect(Collectors.maxBy(Integer::compareTo));
    System.out.println(max);
}
实现方式二:
/**
 * Optional[1000]
 */
@Test
void test_01() {
    Optional<Integer> max = transactionList.stream()
            .map(Transaction::getValue)
            .max(Integer::compareTo);
    System.out.println(max);
}
题目八:
  • 所有的交易额中,找到交易额最小的交易

实现方式一:
/**
 * Optional[Transaction(trader=Trader(name=Brian, city=Cambridge), year=2011, value=300)]
 */
@Test
void test_01() {
    Optional<Transaction> min = transactionList.stream()
            .min((e1, e2) -> e1.getValue().compareTo(e2.getValue()));
    System.out.println(min);
}
实现方式二:
/**
 * Optional[Transaction(trader=Trader(name=Brian, city=Cambridge), year=2011, value=300)]
 */
@Test
void test_01() {
    Optional<Transaction> min = transactionList.stream()
            .collect(Collectors.minBy((e1, e2) -> e1.getValue().compareTo(e2.getValue())));
    System.out.println(min);
}

 

 

标签:练习题,Cambridge,stream,Stream,Trader,API,Transaction,Test,transactionList
From: https://www.cnblogs.com/huang2979127746/p/16665292.html

相关文章

  • Java8Stream流复习和api总结
    构建方式list.stream();Stream.of(list);基础常用APIStream<Number>stream=list.stream();//获取最大值stream.max(比较器);//获取最小值stream.min(比较器);......
  • drf基本视图类APIView
    rest_framework.views.APIViewAPIView是RESTframework提供的所有视图类的基类,继承自Django的view父类APTview与view的不同之处在于:传入到视图方法中的是RESTfr......
  • API 调试工具 All In One
    API调试工具AllInOne接口调试工具ApifoxApifox是API文档、API调试、APIMock、API自动化测试一体化协作平台,定位Postman+Swagger+Mock+JMeter。htt......
  • API优先开发成熟度框架
    API优先开发成熟度框架Photoby马雷克·奥康on不飞溅在与软件开发人员的交谈中,我注意到他们中的大多数都声称在他们的API开发策略中是API优先的。实际上,Postm......
  • Syntegra 的合成数据 API 入门 | Syntegra
    Syntegra的合成数据API入门|SyntegraSyntegra的SyntheticDataAPI的目标是让数据科学家、分析工程师和产品开发人员更容易访问患者级别的医疗保健数据。直接在......
  • cypress安装时npm报错:npm WARN deprecated [email protected]: The querystring API
    处理方法一:更新npm版本:npminstall-gnpm使用淘宝镜像重新安装依赖:npminstall--registry=https://registry.npm.taobao.orgnpminstall-gcnpm--registry=https......
  • WebAssembly JS API All In One
    WebAssemblyJSAPIAllInOne在js中执行.wasm文件的步骤(()=>{constlog=console.log;log(`\n......
  • 基于百度通用翻译API的在线翻译页面
    百度通用翻译API实现在线翻译界面前期准备注册账号:api.fanyi.baidu.com申请百度通用翻译API服务记住appid以及key(后面用的上)准备一个MD5算法观看文档学习使用规则......
  • 常见HTTP请求Web API接口
    一、HTTP请求带账号和密码的域名接口1.接口地址:http://yuming.com/test/model2.请求头:账号:admin;密码:1234563.接口入参格式:点击查看代码{"code":"0","msg":"......
  • 支持pycahrm代码自动补全的库才是好库,不能代码补全的库很垃圾。fastapi暴击flask
     看看fastapi的源码,application.py和routing.py两个文件里面的postdeletegetput等方法,全部入参几乎99%一摸一样,高度重复了近上千行代码,但是我支持。 但是因为......