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.

最低0.47元/天 解锁文章

624

被折叠的 条评论
为什么被折叠?



