JDK8-新特性作业01

发布时间 2023-10-11 20:57:30作者: Hlmove

jdk8-day2-作业

考点:方法引用

1.举例说明

静态方法引用

实例方法引用

使用对象引用方法

构造方法引用

package Java_02homework;

/**
 * @author Hlmove
 * @date 创建日期 2023/8/31 17:28
 * @Description Java_02homework
 * @Note
 */
public class P1_1 {
    //静态方法引用
    Action a = Integer::parseInt;
    //
    //实例方法引用
    Action b = String::length;
    //
    //使用对象引用方法
    String s =  "1";
    Action c = s::indexOf;
    //
    //构造方法引用
    Action1 d = int[]::new;
    interface Action{
        int action(String s);
    }
    interface Action1{
        int[] action(int s);
    }
}

考点:stream中方法的使用

1.现在有两个 ArrayList 集合存储队伍当中的多个成员姓名,要求使用Stream流依次进行以 下若干操作步骤: (类和集合内容自己提供)
  1. 第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中。
  2. 第一个队伍筛选之后只要前3个人;存储到一个新集合中。
  3. 第二个队伍只要姓张的成员姓名;存储到一个新集合中。
  4. 第二个队伍筛选之后不要前2个人;存储到一个新集合中。
  5. 将两个队伍合并为一个队伍;存储到一个新集合中。

此处需要创建person对象

  1. 根据姓名创建 Person 对象;存储到一个新集合中。

  2. 打印整个队伍的Person对象信息。

    package Java_02homework;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    /**
     * @author Hlmove
     * @date 创建日期 2023/8/31 18:01
     * @Description Java_02homework
     * @Note 现在有两个 ArrayList 集合存储队伍当中的多个成员姓名,要求使用Stream流依次进行以 下若干操作步骤: (类和集合内容自己提供)
     * 1. 第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中。
     * 2. 第一个队伍筛选之后只要前3个人;存储到一个新集合中。
     * 3. 第二个队伍只要姓张的成员姓名;存储到一个新集合中。
     * 4. 第二个队伍筛选之后不要前2个人;存储到一个新集合中。
     * 5. 将两个队伍合并为一个队伍;存储到一个新集合中。
     * 此处需要创建person对象
     * 6. 根据姓名创建 Person 对象;存储到一个新集合中。
     * 7. 打印整个队伍的Person对象信息。
     */
    public class P2_1 {
        public static void main(String[] args) {
            //提供两个 ArrayList 集合存储队伍当中的多个成员姓名
            List<String> list1 = Arrays.asList("jack", "lucy", "tom","json","apple","ada");
            List<String> list2 = Arrays.asList("jack", "lucy", "武张","张三","张","adc");
            // 用stream流获取这两个list集合
            Stream<String> s1 = list1.stream();
            Stream<String> s2 = list2.stream();
            //1.第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中。
    //        ArrayList<String> collect1 = s1.filter(s -> s.length() == 3).collect(Collectors.toCollection(ArrayList::new));
    //        System.out.println("collect1 = "+collect1);
            //2.第一个队列筛选之后只要前3个人;存储到一个新集合中。
    //        Collection<String> collect2 = s1.limit(3).collect(Collectors.toCollection(ArrayList::new));
    //        System.out.println("collect2 = " + collect2);
            //3.第二个队只要姓张的成员姓名;存储到一个新集合中。
    //        ArrayList<String> collect3 = s2.filter(s -> "张".equals(s.substring(0, 1))).collect(Collectors.toCollection(ArrayList::new));
    //        System.out.println("collect3 = " + collect3);
            //4.第二个队伍筛选之后不要前2个人;存储到一个新集合中。
    //        ArrayList<String> collect4 = s2.skip(2).collect(Collectors.toCollection(ArrayList::new));
    //        System.out.println("collect4 = " + collect4);
            //5.将两个队伍合并为一个队伍;存储到一个新集合中。
            ArrayList<String> collect5 = Stream.concat(s1, s2).collect(Collectors.toCollection(ArrayList::new));
            System.out.println("collect5 = " + collect5);
            //6.根据姓名创建 Person 对象;存储到一个新集合中。
            List<Person>  list = new ArrayList<>();
            collect5.forEach(s -> list.add(new Person(s)));
            //7.将两个队伍合并为一个队伍;存储到一个新集合中。
            System.out.println(list);
        }
    
    }
    class Person{
        public  String name;
    
        public Person(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
    
2.假设集合容器中有

("水煮鱼"),("酸菜鱼"),("麻辣鱼"),("麻婆豆腐"),("回锅肉"),("鱼香肉丝") ,("水煮肉片"),("宫保鸡丁"),("剁椒 鱼头"),("夫妻肺片")等这些菜名字符串。

运用Predicate函数式接口和Lambda表达式过滤菜名中只有三个 字符长度的菜品和统计菜品中包含“鱼”字符的菜品

package Java_02homework;

import java.util.Arrays;
import java.util.List;

/**
 * @author Hlmove
 * @date 创建日期 2023/8/31 18:25
 * @Description Java_02homework
 * @Note 运用Predicate函数式接口和Lambda表达式过滤菜名中只有三个 字符长度的菜品和统计菜品中包含“鱼”字符的菜品
 */
public class P3_1 {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("水煮鱼", "酸菜鱼", "麻辣鱼",
                "麻婆豆腐", "回锅肉", "鱼香肉丝", "水煮肉片", "宫保鸡丁", "剁椒 鱼头", "夫妻肺片");
//        Predicate<String>  predicate = s -> s.contains("鱼");
        list.stream().filter(s -> s.length() == 3).forEach(s -> {
            if (s.contains("鱼")){
                System.out.println(s);
            }
        });
    }
}

3.根据提示使用stream完成以下题目

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 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)

);1) 找出2011年发生的所有交易,并按交易额排序(从低到高)。

(2) 交易员都在哪些不同的城市工作过?

(3) 查找所有来自于剑桥的交易员,并按姓名排序。

(4) 返回所有交易员的姓名字符串,按字母顺序排序。

(5) 有没有交易员是在米兰工作的?

(6) 打印生活在剑桥的交易员的所有交易额。

(7) 所有交易中,最高的交易额是多少?

(8) 找到交易额最小的交易。

package Java_02homework;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Stream;

/**
 * @author Hlmove
 * @date 创建日期 2023/8/31 18:48
 * @Description Java_02homework
 * @Note 1) 找出2011年发生的所有交易,并按交易额排序(从低到高)。
 * (2) 交易员都在哪些不同的城市工作过?
 * (3) 查找所有来自于剑桥的交易员,并按姓名排序。
 * (4) 返回所有交易员的姓名字符串,按字母顺序排序。
 * (5) 有没有交易员是在米兰工作的?
 * (6) 打印生活在剑桥的交易员的所有交易额。
 * (7) 所有交易中,最高的交易额是多少?
 * (8) 找到交易额最小的交易。
 */
public class P4_1 {
    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 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)
        );
        Stream<Transaction> s = transactions.stream();
        List<String> list = new ArrayList<>();
//1) 找出2011年发生的所有交易,并按交易额排序(从低到高)。

//        ArrayList<Transaction> collect = s.filter(e -> e.year == 2011).sorted((o1, o2) -> o1.amount-o2.amount).collect(Collectors.toCollection(ArrayList::new));
//        System.out.println("collect = " + collect);

// * (2) 交易员都在哪些不同的城市工作过?


//        s.forEach(m-> {
//            if (!list.contains(m.trader.city)){
//                list.add(m.trader.city);
//                System.out.println("s = "+m.trader.city);
//            }
//        });

// * (3) 查找所有来自于剑桥的交易员,并按姓名排序。

//        s.filter(transaction -> "Cambridge".equals(transaction.trader.city))
//                .sorted((o1, o2) -> o1.trader.name.compareTo(o2.trader.name))
//                .forEach(System.out::println);

// * (4) 返回所有交易员的姓名字符串,按字母顺序排序。

//        s.sorted(Comparator.comparing(o -> o.trader.name))
//                .forEach(transaction -> {
//                    if (!list.contains(transaction.trader.name)) {
//                        list.add(transaction.trader.name);
//                        System.out.println(transaction.trader.name);
//                    }
//                });

// * (5) 有没有交易员是在米兰工作的?

//        s.filter(e-> "Milan".equals(e.trader.city)).forEach(transaction -> {
//            if (!list.contains(transaction.trader.name)){
//                list.add(transaction.trader.name);
//                System.out.println(transaction.trader.name);
//            }
//        });

// * (6) 打印生活在剑桥的交易员的所有交易额。

//        s.filter(transaction -> "Cambridge".equals(transaction.trader.city))
//                .forEach(transaction -> System.out.println(transaction.amount));
//
// * (7) 所有交易中,最高的交易额是多少?
//
//        s.max(Comparator.comparingInt(o -> o.amount)).ifPresent(transaction -> System.out.println(transaction.amount));
//
// * (8) 找到交易额最小的交易。
        s.min(Comparator.comparingInt(o -> o.amount)).ifPresent(transaction -> System.out.println(transaction.amount));
    }

    static class Trader {
        public String name;
        public String city;

        public Trader(String name, String city) {
            this.name = name;
            this.city = city;
        }

        @Override
        public String toString() {
            return "Trader{" +
                    "name='" + name + '\'' +
                    ", city='" + city + '\'' +
                    '}';
        }
    }

    static class Transaction {
        public Trader trader;
        public int year;
        public int amount;

        public Transaction(Trader trader, int year, int amount) {
            this.trader = trader;
            this.year = year;
            this.amount = amount;
        }

        @Override
        public String toString() {
            return "Transaction{" +
                    "trader=" + trader +
                    ", year=" + year +
                    ", amount=" + amount +
                    '}';
        }
    }
}