1、算子介绍
中间算子
filter: Stream<T> filter(Predicate<? super T> predicate);
sorted: Stream<T> sorted(Comparator<? super T> comparator);
map: <R> Stream<R> map(Function<? super T, ? extends R> mapper);
distinct: Stream<T> distinct();
终端算子:
anyMatch:boolean anyMatch(Predicate<? super T> predicate);
reduce: Optional<T> reduce(BinaryOperator<T> accumulator);
foreach: void forEach(Consumer<? super T> action);
2、案例
package java8;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class StreamExam4 {
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 brain = new Trader("Brain", "Cambridge");
List<Transaction> transactions = Arrays.asList(new Transaction(2011, 300, brain),
new Transaction(2012, 1000, raoul),
new Transaction(2011, 400, raoul),
new Transaction(2012, 710, mario),
new Transaction(2012, 710, mario),
new Transaction(2012, 950, alan));
//过滤年份2011&&按照value排序
transactions.stream()
.filter(transaction -> transaction.getYear() == 2011)
.sorted(Comparator.comparing(Transaction::getValue))
.forEach(System.out::println);
//所有的城市去重
transactions.stream()
.map(transaction -> transaction.getTrader().getCity())
.distinct()
.forEach(System.out::println);
//所有的名字去重、排序、拼接
String reduceRes = transactions.stream()
.map(transaction -> transaction.getTrader().getName())
.distinct()
.sorted()//可以不传参数
.reduce("", String::concat);
System.out.println(reduceRes);
//是否有trader在milan
boolean milan = transactions.stream()
.anyMatch(transaction -> transaction.getTrader().getCity().equals("Milan"));
System.out.println(milan);
//找到最大的value
Optional<Integer> maxValue = transactions.stream()
.map(Transaction::getValue)
.reduce(Integer::max);
System.out.println(maxValue.get());
}
}