package xiawu;
import java.io.ObjectInputStream.GetField;
import java.text.Collator;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;
//交易员类
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 + "]";
}
}
//交易数据
class Transaction {
private Trader trader;// 交易员
private int year;// 年份
private int value; // 金额
public Transaction(Trader trader, int year, int value) {
this.trader = trader;
this.year = year;
this.value = value;
}
public Trader getTrader() {
return trader;
}
public void setTrader(Trader trader) {
this.trader = trader;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
@Override
public String toString() {
return "Transaction [trader=" + trader + ", year=" + year + ", value=" + value + "]";
}
}
public class a1 {
public static void main(String[] args) {
// 创建了4个交易员对象
Trader raoul = new Trader("Raoul", "Cambridge");
Trader mario = new Trader("Mario", "Milan");
Trader alan = new Trader("Alan", "Cambridge");
Trader brian = new Trader("Brian", "Cambridge");
// 创建6条交易记录,存入list集合
List<Transaction> list = 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));
//1.找出2011年的所有数据,并排序
list.stream()//t代表是所有交易对象的集合
.filter(t->t.getYear()==2011)//(过滤)bool类型,true/flase
.sorted((o1,o2)->o1.getValue()-o2.getValue())//按照数据排序
//o1 o2代表每一个交易对象,
.forEach(System.out::println);//输出
System.out.println("-------------2--------------");
//2.交易员在那些城市工作过
Set<String> set=
list.stream()
.map(t->t.getTrader().getCity())//寻找城市
.collect(Collectors.toSet());//
System.out.println(set);
System.out.println("-------------3--------------");
//3.查找来自剑桥的交易员,排序
list.stream()
.map(t->t.getTrader())//获取交易员对象
.filter(t->"Cambridge".equals(t.getCity()))//过滤
.distinct()//去重
.sorted((o1,o2)->o1.getName().compareTo(o2.getName()))//排序
.forEach(System.out::println);
System.out.println("-------------4--------------");
//4.查找所有交易员的姓名字符串,排序
List<String> nameList =
list.stream()
.map(t -> t.getTrader().getName())
.sorted((o1,o2) -> o1.compareTo(o2))
.distinct().collect(Collectors.toList());
System.out.println(nameList);
System.out.println("-------------5--------------");
//5.筛选在米兰工作的
list.stream()
.map(t->t.getTrader())//map用于转变类型
.filter(t->"Milan".equals(t.getCity()))//过滤
.forEach(System.out::println);
//方法2
boolean fiag = list.stream().anyMatch(t->"Milan".equals(t.getTrader().getCity()));
System.out.println(fiag);
System.out.println("-------------6--------------");
//6生活在剑桥的有交易员金额和
int bool=
list.stream()
.filter(t->"Cambridge".equals(t.getTrader().getCity()))//过滤条件
.map(t->t.getValue()).reduce((t,u)->t+u).get();//求和
System.out.println(bool);
System.out.println("-------------7--------------");
//7.求最高交易额
int max =
list.stream()
.map(t->t.getValue()).reduce(Integer::max).get();
System.out.println(max);
}
}