乐趣区

java8的stream流练习2-改选自java8实战书

import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * @Author weijun.nie
 * @Date 2020/5/26 10:35
 * @Version 1.0
 */
@Slf4j
public class TranTestDemo {public static void main(String[] args) {Trader niuj = new Trader("nj 牛进", "上海");
        Trader maik = new Trader("mk 买康", "香港");
        Trader niuf = new Trader("nf 牛发", "上海");
        Trader jiny = new Trader("jy 靳扬", "上海");
        List<Transaction> transactions = Arrays.asList(new Transaction(jiny, 2011, 300),
                new Transaction(niuj, 2012, 1000),
                new Transaction(niuj, 2011, 400),
                new Transaction(maik, 2012, 710),
                new Transaction(maik, 2012, 700),
                new Transaction(niuf, 2012, 950)
        );

        // (1) 找出 2011 年发生的所有交易,并按交易额排序(从低到高)。// (1-1). 打印
        log.info("====================== 遍历打印 1 ===============================");
        transactions.stream().filter(t -> 2011 == t.getYear()).sorted((t1, t2) -> Integer.valueOf(t1.getValue()).compareTo(Integer.valueOf(t2.getValue()))).forEach(System.out::println);
        log.info("====================== 遍历打印 2 ===============================");
        transactions.stream().filter(t -> 2011 == t.getYear()).sorted(Comparator.comparingInt(Transaction::getValue)).forEach(System.out::println);
        log.info("====================== 遍历打印 3 ===============================");
        transactions.stream().filter(t -> 2011 == t.getYear()).sorted(Comparator.comparing(Transaction::getValue)).forEach(System.out::println);

        log.info("====================== 返回集合 ===============================");
        // (1-2). 返回 List<Transaction>
        List<Transaction> result1List = transactions.stream().filter(t -> 2011 == t.getYear()).sorted(Comparator.comparingInt(Transaction::getValue)).collect(Collectors.toList());
        log.info("找出 2011 年发生的所有交易,并按交易额排序(从低到高):\t{}", result1List);

        // (2) 交易员都在哪些不同的城市工作过?log.info("=====================================================");
        List<String> cities = transactions.stream().map(t -> t.getTrader().getCity()).distinct().collect(Collectors.toList());
        log.info("交易员都在哪些不同的城市工作过:\t{}", cities);

        // (3) 查找所有来自于上海的交易员,并按姓名排序。log.info("=====================================================");
        List<Trader> SHTradersSorted = transactions.stream().map(Transaction::getTrader).filter(t -> t.getCity().equals("上海")).sorted(Comparator.comparing(Trader::getName)).collect(Collectors.toList());
        log.info("查找所有来自于上海的交易员,并按姓名排序:\t{}", SHTradersSorted);

        // (4) 返回所有交易员的姓名字符串,按字母顺序排序。log.info("=====================================================");
        List<String> traderNamesList = transactions.stream().map(t -> t.getTrader().getName()).distinct().sorted().collect(Collectors.toList());
        log.info("返回所有交易员的姓名字符串,按字母顺序排序:\t{}", traderNamesList);

        // (5) 有没有交易员是在北京工作的?log.info("=====================================================");
        boolean hasInBeijing = transactions.stream().filter(t -> t.getTrader().getCity().equals("北京")).findAny().isPresent();
        log.info("有没有交易员是在北京工作的:{}", hasInBeijing);

        // (6) 打印生活在上海的交易员的所有交易额。log.info("=====================================================");
        List<Integer> valuesInShanghai = transactions.stream().filter(t -> t.getTrader().getCity().equals("上海")).map(t -> t.getValue()).collect(Collectors.toList());
        log.info("打印生活在上海的交易员的所有交易额:\t{}", valuesInShanghai);

        // (7) 所有交易中,最高的交易额是多少?log.info("=====================================================");
        Optional<Integer> max = transactions.stream().map(t -> t.getValue()).max(Comparator.comparingInt(Integer::intValue));
        log.info("所有交易中,最高的交易额是多少 \t{}", max.get());

        // (8) 找到交易额最小的交易。log.info("=====================================================");
        Transaction minTransanction = transactions.stream().collect(Collectors.minBy(Comparator.comparing(t -> t.getValue()))).get();
        log.info("找到交易额最小的交易 \t:{}", minTransanction);
    }
}

====================== 遍历打印 1 ===============================
{Trader{name=’jy 靳扬 ’, city=’ 上海 ’}, year: 2011, value:300}
{Trader{name=’nj 牛进 ’, city=’ 上海 ’}, year: 2011, value:400}
====================== 遍历打印 2 ===============================
{Trader{name=’jy 靳扬 ’, city=’ 上海 ’}, year: 2011, value:300}
{Trader{name=’nj 牛进 ’, city=’ 上海 ’}, year: 2011, value:400}
====================== 遍历打印 3 ===============================
{Trader{name=’jy 靳扬 ’, city=’ 上海 ’}, year: 2011, value:300}
{Trader{name=’nj 牛进 ’, city=’ 上海 ’}, year: 2011, value:400}
====================== 返回集合 ===============================

找出 2011 年发生的所有交易,并按交易额排序(从低到高): [{Trader{name=’jy 靳扬 ’, city=’ 上海 ’}, year: 2011, value:300}, {Trader{name=’nj 牛进 ’, city=’ 上海 ’}, year: 2011, value:400}]

交易员都在哪些不同的城市工作过: [上海, 香港]

查找所有来自于上海的交易员,并按姓名排序: [Trader{name=’jy 靳扬 ’, city=’ 上海 ’}, Trader{name=’nf 牛发 ’, city=’ 上海 ’}, Trader{name=’nj 牛进 ’, city=’ 上海 ’}, Trader{name=’nj 牛进 ’, city=’ 上海 ’}]

返回所有交易员的姓名字符串,按字母顺序排序: [jy 靳扬, mk 买康, nf 牛发, nj 牛进]

有没有交易员是在北京工作的:false

打印生活在上海的交易员的所有交易额: [300, 1000, 400, 950]

所有交易中,最高的交易额是多少 1000

找到交易额最小的交易 :{Trader{name=’jy 靳扬 ’, city=’ 上海 ’}, year: 2011, value:300}

退出移动版