如何让Java 8与Eclipse一起工作?
我已按照本指南但不起作用.我也看过Eclipse Java 8 wiki页面,但他们没有解释如何处理签出的git存储库.
我糊涂了.我认为Java8将从石器时代开始出现并开始支持lambda/closures.但是当我尝试:
public static void main(String[] args) {
int number = 5;
ObjectCallback callback = () -> {
return (number = number + 1);
};
Object result = callback.Callback();
System.out.println(result);
}
Run Code Online (Sandbox Code Playgroud)
它说number should be effectively final.那是呃,不是我认为的封闭.这听起来像是通过值而不是通过引用来复制环境.
奖金问题!
android会支持Java-8功能吗?
Java 8包含了一个名为Defender方法的新功能,它允许在接口中创建默认方法实现.
首先,对于Java中所有精简程序员来说,这是一个巨大的范式转换.我查看了Brain Goetz给出的JavaOne 13演示文稿,他正在讨论集合库中的新内容stream()和parallelStream()实现.
为了在Collection界面中添加新方法,他们不能在不破坏以前版本的情况下添加新方法.所以他说,为了迎合这一点,我们增加了Default方法的新功能.
public interface SimpleInterface {
public void doSomeWork();
//A default method in the interface created using "default" keyword
default public void doSomeOtherWork(){
System.out.println("DoSomeOtherWork implementation in the interface");
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题基本上是默认方法只是在需要向接口添加新方法而不破坏客户端代码时才有用吗?或者它也有一些其他用途吗?
我担心这有点愚蠢的问题.
有没有人可以告诉我为什么没有BooleanConsumer相反的BooleanSupplier?
除了"因为根本没有"之外还有其他原因吗?
我应该创建自己的吗?还是我错过了别的什么?
public interface BooleanConsumer {
void accept(boolean value);
default BooleanConsumer andThen(final BooleanConsumer after) {
return v -> {
accept(v);
after.accept(v);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在哪里使用?我正在写一个使用大量消费者和供应商的图书馆.我成功写了一行,LongConsumer我遇到了一种情况,希望消费者接受一个来自方法结果的布尔值.说Files.deleteIfExist?
从昨天起,我一直在尝试在我的Ubuntu机器上安装JDK8,但它一直在失败.
我一直在尝试运行命令:
sudo add-apt-repository ppa:webupd8team/java -y
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default
Run Code Online (Sandbox Code Playgroud)
但是我无法继续,因为在运行命令时,sudo apt-get install oracle-java8-installer我得到的是:
...
Connecting to download.oracle.com (download.oracle.com)|23.215.130.99|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2017-10-18 11:07:34 ERROR 404: Not Found.
download failed
Oracle JDK 8 is NOT installed.
dpkg: error processing package oracle-java8-installer (--configure):
subprocess installed post-installation script returned error exit status 1
...
Run Code Online (Sandbox Code Playgroud)
我的安装程序是64位Ubuntu 14.04.
在经历将原始数组转换为 Streams 的方法时,我发现char[]不支持,而支持其他原始数组类型。有什么特别的理由将它们排除在流中吗?
DateTimeFormmater 似乎没有处理该月的单个数字日:
String format = "MM/dd/yyyy";
String date = "5/3/1969";
System.out.println(new SimpleDateFormat(format).parse(date));
System.out.println(LocalDate.parse(date, DateTimeFormatter.ofPattern(format)));
Run Code Online (Sandbox Code Playgroud)
在此示例中,SimpleDateFormat正确解析日期,但DateTimeFormatter会引发异常.如果我使用零填充日期,例如"05/03/1969",两者都有效.但是,如果月中的某一天或一年中的DateTimeFormatter某个月是单个数字,则抛出异常.
DateTimeFormatter解析每月和每月的一位和两位数的正确格式是什么?
给定一个String我需要获得一个Optional,如果String为null或为空,则结果为Optional.empty.我可以这样做:
String ppo = "";
Optional<String> ostr = Optional.ofNullable(ppo);
if (ostr.isPresent() && ostr.get().isEmpty()) {
ostr = Optional.empty();
}
Run Code Online (Sandbox Code Playgroud)
但肯定必须有一种更优雅的方式.
我有两个列表,我想要过滤器thoose元素,这两个元素都列表包含.我想用lambda表达式来做这件事.
用户getName和客户端getUserName都返回String.
这是我的示例代码:
List<Client> clients = new ArrayList<>();
List<User> users = new ArrayList<>();
List<Client> results = new ArrayList<>();
for (Client user : users) {
for(Client client: clients){
if(user.getName().equals(client.getUserName())){
result.add(client);
}
}
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个这样的列表:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)
是否可以使用Java 8流从此列表中获取每个第二个元素以获取以下内容?
[1, 3, 5, 7, 9]
Run Code Online (Sandbox Code Playgroud)
或者甚至每三个元素?
[1, 4, 7, 10]
Run Code Online (Sandbox Code Playgroud)
基本上,我正在寻找一个函数来获取流的每个第n个元素:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> list2 = list.stream().takenth(3).collect(Collectors.toList());
System.out.println(list2);
// => [1, 4, 7, 10]
Run Code Online (Sandbox Code Playgroud)