我手动在ubuntu 14.04上安装了oracle JDK-8.但每当我想安装一个需要jdk8的软件包时,apt-get会再次尝试安装jdk 8.我的国家是受限制的,所以oracle服务器不允许我下载jdk8.
$java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)
apt-get的结果是:
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
Errors were encountered while processing:
oracle-java8-installer
E: Sub-process /usr/bin/dpkg returned an error code (1)
Run Code Online (Sandbox Code Playgroud)
如果出现此错误,apt-get将无法完成安装.
我正在尝试将java.time.LocalTime对象转换为java.util.Date但无法找到任何合适的方法.这样做的正确方法是什么?
有没有什么理由为什么java似乎没有内置的直接转换方法?
可能的重复:
如何转换joda时间 - 对我不起作用,可能我错过了一些"joda"库?
如何将Date转换为LocalTime? - 这反过来解决转换问题.
我正在探索Java 8的新java.time API.我特别想检索当前时间(我当前的时区,不同的时区和不同的偏移量).
代码是:
public static void getCurrentLocalTime(){
LocalTime time = LocalTime.now();
System.out.println("Local Time Zone: "+ZoneId.systemDefault().toString());
System.out.println("Current local time : " + time);
}
public static void getCurrentTimeWithTimeZone(){
LocalDateTime localtDateAndTime = LocalDateTime.now();
ZoneId zoneId = ZoneId.of("America/Los_Angeles");
ZonedDateTime dateAndTimeInLA = ZonedDateTime.of(localtDateAndTime, zoneId);
String currentTimewithTimeZone =dateAndTimeInLA.getHour()+":"+dateAndTimeInLA.getMinute();
System.out.println("Current time in Los Angeles: " + currentTimewithTimeZone);
}
public static void getCurrentTimeWithZoneOffset(){
LocalTime localtTime = LocalTime.now();
ZoneOffset offset = ZoneOffset.of("-08:00");
OffsetTime offsetTime = OffsetTime.of(localtTime, offset);
String currentTimewithZoneOffset =offsetTime.getHour()+":"+offsetTime.getMinute();
System.out.println("Current time with offset -08:00: " + …Run Code Online (Sandbox Code Playgroud) 我经常发现自己需要过滤Stream或使用谓词来检查给定字段是否具有给定值.
比方说我有这个POJO:
public class A {
private Integer field;
public A(final Integer field) {
this.field = field;
}
public Integer getField() {
return field;
}
}
Run Code Online (Sandbox Code Playgroud)
我想Stream根据以下值来过滤一个对象field:
final Integer someValue = 42;
Stream.of(new A(42), new A(1729), new A(42), new A(87539319), new A(null))
.filter(a -> Objects.equals(a.getField(), someValue))
...
Run Code Online (Sandbox Code Playgroud)
是否有方便的方法来生成方法的谓词filter?我注意到Predicate.isEqual它有但不适合需要.
我可以很容易地写一个这样的:
public static <T,R> Predicate<T> isEqual(Function<? super T, ? extends R> f, R value) {
return v -> Objects.equals(value, f.apply(v));
}
Run Code Online (Sandbox Code Playgroud)
并将其用作: …
让我们假设我们有一个国家列表:List<Country>每个国家都有一个区域列表的参考:( List<Region> 例如美国的州).像这样的东西:
USA
Alabama
Alaska
Arizona
...
Germany
Baden-Württemberg
Bavaria
Brandenburg
...
Run Code Online (Sandbox Code Playgroud)
在"普通的"Java中,我们可以计算所有区域,例如:
List<Country> countries = ...
int regionsCount = 0;
for (Country country : countries) {
if (country.getRegions() != null) {
regionsCount += country.getRegions().size();
}
}
Run Code Online (Sandbox Code Playgroud)
是否有可能通过Java 8 Stream API实现相同的目标?我想到了类似的东西,但我不知道如何使用count()流API的方法计算嵌套列表的项目:
countries.stream().filter(country -> country.getRegions() != null).???
Run Code Online (Sandbox Code Playgroud) 我试图使用新的并行功能JDK8,但不幸的是,我无法让它工作.NetBeans 7.1表示不存在"并行"方法.
这种方法需要特殊导入吗?有没有人有示例代码演示Java 8并行性?
我正在玩Java8 lambda表达式.作为一个例子,我然后尝试总结列表中包含的年龄:
import java.util.Arrays;
import java.util.List;
public class Person {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(new Person("FooBar", 12), new Person("BarFoo", 16));
Integer sumOfAges = persons.stream().map(Person::getAge).sum();
System.out.println("summedUpAges: " + sumOfAges);
}
private final String name;
private final Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下java编译器编译此代码段时:
openjdk version "1.8.0-ea"
OpenJDK Runtime Environment (build 1.8.0-ea-lambda-night
OpenJDK …Run Code Online (Sandbox Code Playgroud) 我正在尝试一次声明和定义更大的哈希映射.我是这样做的:
public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{
put(x, y);
put(x, y);
}};
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在体内使用lambda表达式时put,我正在进行eclipse warrning/error.这就是我在HashMap中使用lambda的方法:
public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{
put(0, () -> { return "nop"; });
put(1, () -> { return "nothing...."; });
}};
Run Code Online (Sandbox Code Playgroud)
Eclipse以逗号开头强调lambda的整个部分.错误消息:
Syntax error on token ",", Name expected
Syntax error on tokens, Expression expected instead
Run Code Online (Sandbox Code Playgroud)
有人知道我做错了什么吗?是否允许通过lambda表达式初始化HashMap?请帮忙.
Spring文档建议不要在接口方法上放置@Transactional注释,因为接口注释不是由类继承的.但是,使用Java 8,我们可以在界面中提供具体的默认实现.如果这样的默认接口方法需要是事务边界,我们别无选择:我们必须在接口方法上放置@Transactional注释.
这会起作用(即在这种情况下春天是否会尊重交易边界)?如果是这样,这种方法有任何隐藏的陷阱吗?
我最近开始玩Java 8,之前已经在Haskell/Scala中做过点点滴滴.我正在尝试使用Java中的高阶函数,例如map或者forEach,我正在努力理解将一切都推向Stream意识形态的动机是什么.我理解它提供了很好的通用抽象,它应该是懒惰的,但让我们考虑一个非常简单的常见例子:
list.map(x -> do_sth(x));
Run Code Online (Sandbox Code Playgroud)
很常见的习语,期待这个回归List<T>.现在,在Java 8中,我需要做这样的事情:
list.stream().map(x -> doSth(x)).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
现在,到目前为止,我看到这个,在调用collect之前,流将不会应用地图,因此将会有一个通过集合下的集合.我也看不出是为什么地图,列表如常见的使用情况map.toList(),list.groupBy()将不会被添加到相应的接口?我在这里缺少一个潜在的设计决策吗?
java ×10
java-8 ×10
collections ×3
lambda ×3
java-time ×2
annotations ×1
apt-get ×1
date ×1
hashmap ×1
java-stream ×1
predicate ×1
spring ×1
transactions ×1
ubuntu ×1