Java Lambda与Stream编程实践解析

1、以下哪些 Lambda 表达式是有效的 Function 实现?x -> x + 1; (x, y) -> x + 1; x -> x == 1;

`x -> x + 1` 是有效的 `Function<Long, Long>` 实现,因为 `Function<Long, Long>` 表示接收一个 `Long` 类型参数并返回一个 `Long` 类型结果,`x -> x + 1` 符合此要求;`(x, y) -> x + 1` 接收两个参数,不符合 `Function` 接口单参数的要求;`x -> x == 1` 返回的是布尔类型,不是 `Long` 类型,也不符合要求。所以只有 `x -> x + 1` 是有效的实现。

2、在Javadoc中或使用集成开发环境(IDE)查找方法的方式有哪些?

一般在IDE里可通过代码导航功能查找方法,在Javadoc中可根据类和方法名检索方法。

3、对于作为ActionListener使用的lambda表达式 JButton button = new JButton(); button.addActionListener(event -> System.out.println(event.getActionCommand())); ,javac能否推断出正确的参数类型?换句话说,这段代码能编译通过吗?

能。 javac 可以从 addActionListener 的签名推断出变量 event 的类型,即使未显式提供类型,代码仍可编译。

4、给定 check 方法的以下重载:接口 IntPred { boolean test(Integer value) ; } 以及 boolean check(Predicate<Integer> predicate) ; boolean check(IntPred predicate) ; 那么 check(x -> x > 5) 能否被类型推断?

无法确定。因为 x -> x > 5 Predicate<Integer> IntPred 都兼容,编译器无法判断哪个是更具体的类型,会认为这是一个模糊的方法调用,导致编译失败。需要将 lambda 表达式显式转换为 Predicate<Integer> IntPred 才能解决。

5、常见的流操作。实现以下功能:a. 一个对数字求和的函数,即 int addUp(Stream numbers);b. 一个接收艺术家信息并返回包含他们姓名和出生地的字符串列表的函数;c. 一个接收专辑信息并返回最多包含三首曲目的专辑列表的函数

以下是 Java 代码实现:

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

class Artist {
    private String name;
    private String origin;

    public Artist(String name, String origin) {
        this.name = name;
        this.origin = origin;
    }

    public String getName() {
        return name;
    }

    public String getOrigin() {
        return origin;
    }
}

class Album {
    private List<String> trackList;

    public Album(List<String> trackList) {
        this.trackList = trackList;
    }

    public List<String> getTrackList() {
        return trackList;
    }
}

public class StreamOperations {
    // a. 对数字求和的函数
    public static int addUp(Stream<Integer> numbers) {
        return numbers.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值