package airycode_java8.nice7;

import airycode_java8.nice1.Employee;
import org.junit.Test; import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors; /**
* Created by admin on 2019/1/3.
*/
public class TestStramAPI { /***
* 1.给定一个数字列表,如何返回一个由每一个数字的平方构成的列表,给定【1,2,3,4,5】返回[1,4,9,16,25]
*/
@Test
public void test1(){
List<Integer> list = Arrays.asList(1,2,3,4,5);
List<Integer> collect = list.stream().map((x) -> x * x).collect(Collectors.toList());
collect.forEach(System.out::println);
} /***
* 2.用map和reduce方法数数流中有多少个emplloyee
*
*/
//准备数据
static List<Employee> employeeList = Arrays.asList(
new Employee("张三",18,9999.99, Employee.Status.FREE),
new Employee("李四",38,5555.55,Employee.Status.BUSY),
new Employee("王五",50,6666.66,Employee.Status.VOCATION),
new Employee("赵六",16,3333.33,Employee.Status.FREE),
new Employee("田七",8,7777.77,Employee.Status.BUSY) );
@Test
public void test2(){
Optional<Integer> sum = employeeList.stream().map((e) -> 1).reduce(Integer::sum);
System.out.println(sum.get());
} }

  交易员和交易练习:

package airycode_java8.nice7;

/**
* 交易员对象
* Created by admin on 2019/1/3.
*/
public class Trader { private String name;
private String city; public Trader(String name, String city) {
this.name = name;
this.city = city;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getCity() {
return city;
} public void setCity(String city) {
this.city = city;
} @Override
public String toString() {
return "Trader{" +
"name='" + name + '\'' +
", city='" + city + '\'' +
'}';
}
} package airycode_java8.nice7; /**
* 交易对象
* Created by admin on 2019/1/3.
*/
public class Transaction { private Trader trader;
private int year;
private int value;
private String currency; public Transaction(Trader trader,int year,int value,String currency){
this.trader = trader;
this.year = year;
this.value = value;
this.currency = currency;
} public Trader getTrader(){
return trader;
}
public int getYear(){
return year;
}
public int getValue(){
return value;
}
public String getCurrency(){
return currency;
} @Override
public String toString(){
return "i am transaction : my trader is : "
+ trader.getName()
+ " ; my year is : "
+ year
+ " ; my value is : "
+ value
+ " ; my currency is : "
+ currency;
}
} package airycode_java8.nice7; import org.junit.Before;
import org.junit.Test; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import static java.util.Comparator.comparingInt;
import static java.util.stream.Collectors.*;
/**
* Created by admin on 2019/1/3.
*/
public class TraderExercise { List<Trader> traders = new LinkedList<>();
List<Transaction> transactions = new LinkedList<>(); @Before
public void init(){ Trader t1 = new Trader("trader1","剑桥");
Trader t2 = new Trader("trader2","米兰");
Trader t3 = new Trader("trader3","剑桥");
Trader t4 = new Trader("trader4","剑桥");
traders.addAll(Arrays.asList(t1,t2,t3,t4)); Transaction tran1 = new Transaction(t4,2011,300,"$");
Transaction tran2 = new Transaction(t1,2012,1000,"$");
Transaction tran3 = new Transaction(t1,2011,400,"¥");
Transaction tran4 = new Transaction(t2,2012,710,"¥");
Transaction tran5 = new Transaction(t2,2012,700,"$");
Transaction tran6 = new Transaction(t3,2012,950,"¥");
transactions.addAll(Arrays.asList(tran1,tran2,tran3,tran4,tran5,tran6));
} /***
* 1.2011年的所有交易并按照金额由小到大排序
*/
@Test
public void test1(){
transactions.stream()
.filter((t)->t.getYear() == 2011)
.sorted((t1,t2)->Integer.compare(t1.getValue(),t2.getValue()))
.forEach(System.out::println);
} /***
*2.交易员都在哪些不同的城市生活
*/
@Test
public void test2(){ traders.stream()
.map(Trader::getCity)
.distinct()
.forEach(System.out::println); } /***
*3.查找所有来自剑桥的交易员,并按姓名排序
*/
@Test
public void test3(){ // traders.stream()
// .filter((t)->"剑桥".equals(t.getCity()))
// .sorted((e1,e2)->e1.getName().compareTo(e2.getName()))
// .forEach(System.out::println);
traders.stream()
.filter((t)->"剑桥".equals(t.getCity()))
.sorted(Comparator.comparing(Trader::getName))
.forEach(System.out::println); } /***
*4.查询所有交易员的姓名字符串,并按字母排序
*/
@Test
public void test4(){ traders.stream()
.filter((t)->"剑桥".equals(t.getCity()))
.sorted(Comparator.comparing(Trader::getName))
.forEach(System.out::println); } /***
*5.有没有交易员在米兰
*/
@Test
public void test5(){ boolean any = traders.stream()
.filter((t) -> "米兰".equals(t.getCity()))
.findAny()
.isPresent();
System.out.println(any); } /***
* 6.打印在剑桥生活的交易员的所有交易金额
*/
@Test
public void test6(){ Integer sum = transactions.stream()
.filter(tran -> "剑桥".equals(tran.getTrader().getCity()))
.map(Transaction::getValue)
.reduce(0, (val1, val2) -> val1 + val2);
System.out.println(sum); } /***
* 7.所有交易中,最高的交易额是多少
*/
@Test
public void test7(){
transactions.stream()
.sorted(Comparator.comparing(Transaction::getValue).reversed())
.findFirst()
.ifPresent(System.out::println); transactions.stream()
.map(Transaction::getValue)
.reduce(Integer::max)
.ifPresent(System.out::println);
} /***
* 8.找到交易额中最小的金额
*/
@Test
public void test8(){
transactions.stream()
.map(Transaction::getValue)
.reduce(Integer::min)
.ifPresent(System.out::println); transactions.stream()
.min(Comparator.comparing(Transaction::getValue))
.ifPresent(System.out::println); transactions.stream()
.min(Comparator.comparing((Transaction t1) -> t1.getValue()))
.ifPresent(System.out :: println); } /***
* 9.统计每个交易员的记录
*/
@Test
public void test9(){
transactions.stream()
.collect(groupingBy(Transaction::getTrader))
.entrySet().stream()
.forEach(System.out::println); } /***
* 10.找到单笔交易最高的交易员
*/
@Test
public void test10(){
transactions.stream()
.max(Comparator.comparing(Transaction::getValue))
.ifPresent(tran->{
System.out.println(tran.getTrader());
});
} /***
* 11.统计交易总额最高的交易员(排序)
*/
@Test
public void test11(){
transactions.stream().collect(groupingBy(Transaction::getTrader))
.entrySet().stream().map(t->{
Map<String,Object> result = new HashMap<>();
int sum = t.getValue().stream().mapToInt(Transaction :: getValue).sum();
result.put("sum",sum);
result.put("trader",t.getKey());
return result; }).sorted(comparingInt((Map m) -> (int)m.get("sum")).reversed()).findFirst().ifPresent(System.out::println);
} /***
* 12.使用方法引用对transaction排序
*/
@Test
public void test12(){
transactions.stream().sorted(Comparator.comparing(Transaction::getValue)).forEach(System.out::println); System.out.println("--------------------------------------------------------------------------------"); //声明接口的实现方式
Function<Transaction,Integer> function = Transaction :: getValue;
Transaction[] transactionsArray = new Transaction[transactions.size()];
Arrays.sort(transactions.toArray(transactionsArray),Comparator.comparing(function));
Arrays.asList(transactionsArray).stream().forEach(System.out :: println);
} /***
* 13.根据trader(对象)将transaction分组
*/
@Test
public void test13(){
transactions.stream()
.collect(groupingBy(Transaction :: getTrader))
.entrySet().stream()
.forEach(System.out :: println);
} //【14.根据货币(字符串)类型分组
@Test
public void exercise14(){
transactions.stream()
.collect(groupingBy(Transaction :: getCurrency))
.entrySet().stream()
.forEach(System.out :: println);
}
//【15.获取交易总金额
@Test
public void exercise15(){
int sum1 = transactions.stream().mapToInt(Transaction::getValue).sum();
System.out.println("通过map转换求和sum1 = " + sum1);
int sum2 = transactions.stream().collect(Collectors.summingInt(Transaction::getValue));
System.out.println("通过collect汇总求和sum2 = " + sum2);
//规约操作都需要使用map将对象映射为返回值的类型
int sum3 = transactions.stream().map(Transaction::getValue).reduce(0,(t1,t2) -> t1 + t2);
System.out.println("通过reduce规约求和sum3 = " + sum3);
}
//【16.二级分类,先按照交易员分类,然后交易金额大于800归为high,低于800归为low
@Test
public void exercise16(){
transactions.stream()
.collect(groupingBy(Transaction :: getTrader,groupingBy(t -> {
if(t.getValue()< 800 ){
return "low";
}else {
return "heigh";
}
})))
.entrySet().stream()
.forEach(System.out :: println);
}
//【17.获取每个交易员,交易最大的一笔
@Test
public void exercise17(){
transactions.stream()
.collect(groupingBy(Transaction::getTrader,maxBy(Comparator.comparingInt(Transaction::getValue))))
.entrySet().stream()
.distinct()
.sorted(Comparator.comparing((Map.Entry m) -> {
Trader t = (Trader) m.getKey();
return t.getName();
}))
.forEach(System.out :: println);
} }

  

JAVA_Stream_练习的更多相关文章

随机推荐

  1. 【每日一题】 UVA - 1589 Xiangqi 函数+模拟 wa了两天

    题意:背景就是象棋, 题解:坑点1(wa的第一天):将军可以吃掉相邻的棋子,(然行列也写反了orz) 坑点2(wa的第二天):将军到马要反过来写,边界有误,并且第一次碰到的车才算(写到后来都忘了) # ...

  2. flannel

    Docker跨主机容器间网络通信实现的工具有Pipework.Flannel.Weave.Open vSwitch(虚拟交换机).Calico实现跨主机容器间的通信.其中Pipework.Weave. ...

  3. iOS-静态库,动态库,framework,bundle浅析(四)

    1. 创建bundle,如图,点击 +  ,弹出选择框, macOS 下的Framework & Library  ,点击bundle,输入bundle的名字,然后点击 finish.   图 ...

  4. [knowledge] netmap

    900MHz的单核处理10GB的包收/发. netmap has been implemented in FreeBSD and Linux and Gbit/s network adapters. ...

  5. 转:Web项目的WEB-INF目录使用说明以及重定向与转发

    原文地址:https://www.cnblogs.com/shenxiaoquan/p/5819359.html 原文内容: 总结一下这篇文章的内容: WEB-INF下面的内容都是只能由服务器级别才能 ...

  6. EF-CodeFirst-域模型配置

    之前说到CodeFirst会使用默认约定从域模型创建数据库,同时也提供了方法重写这些约定;有两种方法可以实现 使用数据注解属性 使用Fluent API 数据注解属性 数据注释是一种简单的基于属性的配 ...

  7. python,re模块正则

    python没有正则需要导入re模块调用.正则表达式是为了匹配字符串,动态模糊的匹配,只要有返回就匹配到了, 没返回就没匹配到,前面是格式后面是字符串 最常用的匹配语法: re.match()#麦驰, ...

  8. idea tomcat控制台system.out.println是乱码

    配置一下tomcat的信息.然后设置VM options.添加:-Dfile.encoding=UTF-8

  9. VS Code编辑器对git项目的支持

    使用git随便clone一个项目下来, 然后用vscode打开项目, 随便打开某个文件, 添加几行代码: 9-11行是我新添加的, 左边绿色的竖条(点击就会看到明细)就表示这几行是新添加的. 然后修改 ...

  10. [py]字符串转换为列表

    字符串转换为列表 "[1,2,3]" ==> [1,2,3]