package IO.stream.work;
import org.junit.Test;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.*;
/**
* User: 彭家琪
* Date: 2019/9/16 17:22
*/
public class DemoStream {
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)
);
@Test
public void test1() {
//1.找出2011年發生的所有交易,並按交易額排序(從低到高)。
transactions.stream().filter(t -> t.getYear() == 2011).sorted(Comparator.comparingInt(Transaction::getValue)).forEach(System.out::println);
}
@Test
public void test2() {
//2. 交易員都在哪些不同的城市工作過?
transactions.stream().map(t -> t.getTrader().getCity()).distinct().forEach(System.out::println);
}
@Test
public void test3() {
//3. 查找所有來自於劍橋的交易員,並按姓名排序。
// .sorted((t1,t2)->t1.getName().compareTo(t2.getName()))
transactions.stream().map(t -> t.getTrader()).filter(t -> "Cambridge".equals(t.getCity()))
.sorted(Comparator.comparing(Trader::getName)).forEach(System.out::println);
}
@Test
public void test4() {
//4. 返回所有交易員的姓名字符串,按字母順序排序。
transactions.stream().map(t -> t.getTrader().getName()).sorted(String::compareTo).forEach(System.out::println);
}
@Test
public void test5() {
//5. 有沒有交易員是在米蘭工作的?
boolean b = transactions.stream().anyMatch(t -> "Milan".equals(t.getTrader().getCity()));
System.out.println(b);
}
@Test
public void test6() {
//6. 打印生活在劍橋的交易員的所有交易額。
Integer sum = transactions.stream().filter(t -> "Cambridge".equals(t.getTrader().getCity()))
.map(Transaction::getValue).reduce(0, (t1, t2) -> t1 + t2);
System.out.println("sum = " + sum);
}
@Test
public void test7() {
//7. 所有交易中,最高的交易額是多少?
Integer max = transactions.stream().map(Transaction::getValue).reduce(Integer::max).get();
System.out.println("最高" + max);
}
@Test
public void test8() {
// 8. 找到交易額最小的交易。
// Transaction transaction = transactions.stream().reduce((t1, t2) -> t1.getValue() < t2.getValue() ? t1 : t2).get();
Integer min = transactions.stream().map(Transaction::getValue).reduce(Integer::min).get();
System.out.println("min = " + min);
}
@Test
public void test9() {
System.out.println(transactions.stream().collect(Collectors.counting()));//計算數目
int max= transactions.stream().collect(maxBy(Comparator.comparingInt(t -> t.getValue()))).get().getValue();
System.out.println(max); //最大值
Double avg = transactions.stream().collect(averagingInt(Transaction::getValue));
System.out.println("avg = " + avg);//平均值
Integer sum = transactions.stream().collect(summingInt(Transaction::getValue));
System.out.println("sum = " + sum);
System.out.println(transactions.stream().collect(summarizingInt(Transaction::getValue)));//彙總
Double aver = transactions.stream().collect(averagingInt(Transaction::getValue));
System.out.println("aver = " + aver);
}
}
package IO.stream.work;
/**
* User: 彭家琪
* Date: 2019/9/16 17:18
*/
public class Trader {
private final String name;
private final String city;
@Override
public String toString() {
return "Trader{" +
"name='" + name + '\'' +
", city='" + city + '\'' +
'}';
}
public String getName() {
return name;
}
public String getCity() {
return city;
}
public Trader(String name, String city) {
this.name = name;
this.city = city;
}
}
package IO.stream.work;
/**
* User: 彭家琪
* Date: 2019/9/16 17:18
*/
public class Transaction {
private final Trader trader;
private final int year;
private final int value;
@Override
public String toString() {
return "Transaction{" +
"trader=" + trader +
", year=" + year +
", value=" + value +
'}';
}
public Trader getTrader() {
return trader;
}
public int getYear() {
return year;
}
public int getValue() {
return value;
}
public Transaction(Trader trader, int year, int value) {
this.trader = trader;
this.year = year;
this.value = value;
}
}