J2EE练习_chapter16Java8新特性_练习题

简介: J2EE练习_chapter16Java8新特性_练习题

题目1

/*
 调用 Collections.sort()方法,通过定制排序比较两个 Employee(先按年龄比,年龄相同按姓名比),使用 Lambda 表达式作为参数传递。
 */
    public static void main(String[] args) {
        List<Employee> employees = EmployeeData.getEmployees();
        List<Employee> collect = employees.stream().sorted((e1, e2) -> {
            int ageValue = Integer.compare(e1.getAge(), e2.getAge());
            if (ageValue != 0) {
                return ageValue;
            } else {
                return e1.getName().compareTo(e2.getName());
            }
        }).collect(Collectors.toList());
        collect.forEach(System.out::println);
    }

题目2

/*
① 声 明 函 数 式 接 口 , 接 口 中 声 明 抽 象 方 法 : public String getValue(String str);
② 声明类 LambdaTest,类中编写方法使用接口作为参数,将一个字符串转换成大写,并作为方法的返回值。
③ 再将一个字符串的第 2 个到第 4 个索引位置进行截取子串。
 */
    @Test
    public void test2() {
        String string = strHandler("abcdef", str -> str.toUpperCase(Locale.ROOT));
        System.out.println(string);
        String subStr = strHandler("世界那么大,我想去看看", str -> str.substring(2, 5));
        System.out.println(subStr);
    }
    //需求:用于处理字符串
    public String strHandler(String str, MyFunction mf) {
        return mf.getValue(str);
    }
package com.jerry.java;
/**
 * @author jerry_jy
 * @create 2022-10-15 9:29
 */
@FunctionalInterface
public interface MyFunction {
    public String getValue(String str);
}

题目3

/*
①声明一个带两个泛型的函数式接口,泛型类型为<T,R> : T 为参数,R 为返回值。
②接口中声明对应抽象方法
③在 LambdaTest 类中声明方法,使用接口作为参数,计算两个 long型参数的和。
④再计算两个 long 型参数的乘积
 */
    @Test
    public void test3() {
        op(100L, 200L, (x1, x2) -> x1 + x2);
        op(300L, 400L, (x1, x2) -> x1 * x2);
    }
    public void op(Long l1, Long l2, MyFunction1<Long, Long> mf) {
        System.out.println(mf.getValue(l1, l2));
    }
package com.jerry.java;
/**
 * @author jerry_jy
 * @create 2022-10-15 9:35
 */
@FunctionalInterface
public interface MyFunction1<T,R> {
    R getValue(T t1,T t2);
}

题目4

/*
给定一个数字列表,如何返回一个由每个数的平方构成的列表呢?
例如,给定【1,2,3,4,5】, 应该返回【1,4,9,16,25】。
 */
    @Test
    public void test1() {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        list.stream().map((x)->x*x).forEach(System.out::println);
    }

题目5

/*
 怎样用 map 和 reduce 方法数一数流中有多少个 Employee 呢?
 */
    @Test
    public void test2(){
        List<Employee> employees = EmployeeData.getEmployees();
        //方式一:
        System.out.println(employees.stream().count());
        //方式二:
        Optional<Integer> integer = employees.stream().map(employee -> 1).reduce(Integer::sum);
        System.out.println(integer.get());
    }

题目6

bffc10b57c304fa08ae02ac1eead89de.png


package com.jerry.java;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
/**
 * @author jerry_jy
 * @create 2022-10-15 9:55
 */
public class TestTransaction {
    List<Transaction> transactions = null;
    @Before
    public void before() {
        Trader raoul = new Trader("Raoul", "Cambridge");
        Trader mario = new Trader("Mario", "Milan");
        Trader alan = new Trader("Alan", "Cambridge");
        Trader brian = new Trader("Brian", "Cambridge");
        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年发生的所有交易, 并按交易额排序(从低到高)
    @Test
    public void test1(){
        transactions.stream().filter(t -> t.getYear()==2011)
                .sorted((t1,t2)->Integer.compare(t1.getValue(), t2.getValue()))
                .forEach(System.out::println);
    }
    //2. 交易员都在哪些不同的城市工作过?
    @Test
    public void test2(){
        transactions.stream().map(transaction -> transaction.getTrader().getCity()).distinct().forEach(System.out::println);
    }
    //3. 查找所有来自剑桥的交易员,并按姓名排序
    @Test
    public void test3(){
        transactions.stream()
                .filter(transaction -> transaction.getTrader().getCity().equals("Cambridge"))
                .map(Transaction::getTrader)
                .sorted((t1,t2)->t1.getName().compareTo(t2.getName()))
                .distinct()
                .forEach(System.out::println);
    }
    //4. 返回所有交易员的姓名字符串,按字母顺序排序
    @Test
    public void test4(){
        transactions.stream()
                .map(transaction -> transaction.getTrader().getName())
                .sorted()
                .forEach(System.out::println);
    }
    //5. 有没有交易员是在米兰工作的?
    @Test
    public void test5(){
        transactions.stream()
                .filter(transaction -> transaction.getTrader().getCity().equals("Milan"))
                .forEach(System.out::println);
    }
    //6. 打印生活在剑桥的交易员的所有交易额
    @Test
    public void test6(){
        System.out.println(transactions.stream()
                .filter(transaction -> transaction.getTrader().getCity().equals("Cambridge"))
                .map(Transaction::getValue)
                .reduce(Integer::sum).get());
    }
    //7. 所有交易中,最高的交易额是多少
    @Test
    public void test7(){
        System.out.println(transactions.stream()
                .map(Transaction::getValue)
                .max(Integer::compareTo).get());
    }
    //8. 找到交易额最小的交易
    @Test
    public void test8( ){
        System.out.println(transactions.stream()
                .map(Transaction::getValue)
                .min(Integer::compareTo).get());
    }
}

END

相关文章
|
27天前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
54 2
|
28天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
38 3
|
28天前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
32 2
|
30天前
|
存储 算法 Java
Java Set因其“无重复”特性在集合框架中独树一帜
【10月更文挑战第14天】Java Set因其“无重复”特性在集合框架中独树一帜。本文深入解析Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定的数据结构(哈希表、红黑树)确保元素唯一性,并提供最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的`hashCode()`与`equals()`方法。
28 3
|
1月前
|
安全 Java API
Java 17新特性让你的代码起飞!
【10月更文挑战第4天】自Java 8发布以来,Java语言经历了多次重大更新,每一次都引入了令人兴奋的新特性,极大地提升了开发效率和代码质量。本文将带你从Java 8一路走到Java 17,探索那些能让你的代码起飞的关键特性。
76 1
|
1月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
77 3
|
10天前
|
分布式计算 Java API
Java 8引入了流处理和函数式编程两大新特性
Java 8引入了流处理和函数式编程两大新特性。流处理提供了一种声明式的数据处理方式,使代码更简洁易读;函数式编程通过Lambda表达式和函数式接口,简化了代码书写,提高了灵活性。此外,Java 8还引入了Optional类、新的日期时间API等,进一步增强了编程能力。这些新特性使开发者能够编写更高效、更清晰的代码。
24 4
|
25天前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
47 3
|
25天前
|
存储 安全 Java
Java Map新玩法:深入探讨HashMap和TreeMap的高级特性
【10月更文挑战第19天】Java Map新玩法:深入探讨HashMap和TreeMap的高级特性,包括初始容量与加载因子的优化、高效的遍历方法、线程安全性处理以及TreeMap的自然排序、自定义排序、范围查询等功能,助你提升代码性能与灵活性。
24 2
|
1月前
|
Java 开发者
在Java的集合世界里,Set以其独特的特性脱颖而出,它通过“哈希魔法”和“红黑树防御”两大绝技
【10月更文挑战第13天】在Java的集合世界里,Set以其独特的特性脱颖而出。它通过“哈希魔法”和“红黑树防御”两大绝技,有效抵御重复元素的侵扰,确保集合的纯洁性和有序性。无论是“人海战术”还是“偷梁换柱”,Set都能从容应对,成为开发者手中不可或缺的利器。
31 6