我正在将应用程序从jdk 8迁移到11,我可以看到ZonedDateTime更改是关于夏时制的行为。JDK8
ZonedDateTime parse = ZonedDateTime.parse("2037-05-10T19:15:00.000+01:00[Europe/Paris]");
System.out.println(parse);
Run Code Online (Sandbox Code Playgroud)
输出:2037-05-10T19:15 + 02:00 [Europe / Paris]
JDK11 / 12
ZonedDateTime parse = ZonedDateTime.parse("2037-05-10T19:15:00.000+01:00[Europe/Paris]");
System.out.println(parse);
Run Code Online (Sandbox Code Playgroud)
2037-05-10T20:15 + 02:00 [欧洲/巴黎]
有人可以向我解释为什么他们会改变这种行为吗?
最好的祝福,
nullPointerException除非e.getKey()返回,否则以下代码将永远有效null
Map<Integer, Optional<SecurityAttributeChange>> spnCreationDetails;
Optional.ofNullable(spnCreationDetails.get(e.getKey()).orElse(new SecurityAttributeChange()).getNewAttribute())
.orElse(new SecurityAttr())
.getUserName());
Run Code Online (Sandbox Code Playgroud)
我在这一行中正在使用NPE,是否可以调试它?我知道spnCreationDetails.get(e.getKey())返回null,null在这里处理过程中我是否遗漏了什么?
-编辑
这是几乎完整的方法,将有助于提供有关如何重构它以便使其可读的输入。
private void updateAuditFields(List<SecurityAttributeChange> securityChanges, Map<Integer, Map<String, Object>> result) {
Map<Integer, Optional<SecurityAttributeChange>> spnModificationDetails = ...
Map<Integer, Optional<SecurityAttributeChange>> spnCreationDetails = ...
result.entrySet().stream().forEach(e -> {
e.getValue()
.put("userIdLastChanged",
Optional.ofNullable(Optional.ofNullable(spnModificationDetails.get(e.getKey()))
.orElse(Optional.of(new SecurityAttributeChange()))
.get()
.getNewAttribute()).orElse(new SecurityAttr()).getUserName());
e.getValue()
.put("lastChangedDatetime",
Optional.ofNullable(Optional.ofNullable(spnModificationDetails.get(e.getKey()))
.orElse(Optional.of(new SecurityAttributeChange()))
.get()
.getNewAttribute()).orElse(new SecurityAttr()).getKnowledgeBeginDate());
e.getValue()
.put("userIdCreated", Optional.ofNullable(
Optional.ofNullable(spnCreationDetails.get(e.getKey())).orElse(Optional.of(new SecurityAttributeChange())).get().getNewAttribute())
.orElse(new SecurityAttr())
.getUserName());
e.getValue()
.put("createdDatetime",
Optional.ofNullable(Optional.ofNullable(spnCreationDetails.get(e.getKey()))
.orElse(Optional.of(new SecurityAttributeChange()))
.get()
.getNewAttribute()).orElse(new SecurityAttr()).getKnowledgeBeginDate());
});
}
Run Code Online (Sandbox Code Playgroud) 我想创建一个克隆列表。我正在使用以下代码段,但是即使MyClass具有默认构造函数,我的IDE也会显示“无法解析构造函数”的编译错误。
List<MyClass> clonedList =
myClassList.stream().map(MyClass::new).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我是流媒体新手,如果我的语法错误,请帮助我。
我在下面的代码中使用嵌套的for循环,并且有一些条件破坏了内部的for循环,这提高了此代码的性能。
public static int getMaxValue(List<Integer> list) {
int result = -1;
for(int i=0; i<list.size(); i++) {
for(int j=i+1; j<list.size(); j++) {
if(list.get(j) - list.get(i) <= 0) break;
if(list.get(j) - list.get(i) > result) {
result = list.get(j) - list.get(i);
}
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
现在如何使用Java 8流执行相同的逻辑?我想出了以下代码:
public static int getMaxValue(List<Integer> list) {
int[] result = { -1 };
IntStream.range(0, list.size()).forEach(i -> {
IntStream.range(i + 1, list.size()).forEach(j -> {
if(list.get(j) - list.get(i) <= 0) return;
if(list.get(j) - list.get(i) > result[0]) { …Run Code Online (Sandbox Code Playgroud) 在最近的一次采访中,有人问我一个问题:“我们怎么能说java8中的功能接口类似于标记接口”。
我无法回答这个问题。
但是我认为标记甚至没有任何方法,而功能接口必须要覆盖一种方法。
有人可以帮助我理解这是否在某些情况下是有效的论点,或者问题本身是错误的?
java interface marker-interfaces java-8 functional-interface
从这篇文章中,我理解的位长bitlength()将给您
此BigInteger的最小2补码表示形式中的位数
但是,当我运行以下程序输出为 0时,我希望此输出为1,因为数字0用一位表示,我很困惑,请帮助
public class Test {
public static void main(String[] args) {
int l = BigInteger.valueOf(0L).bitLength();
System.out.println(l);
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含5个文件的zip文件。其中四个文件很小(几KB),但是一个文件大于4GB。我知道JDK-4681995,它从Java 7开始向Java添加了大文件支持(64位zip支持)。我在Windows 8.1上使用64位Java 8:
C:\Users\user\Desktop>java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
Run Code Online (Sandbox Code Playgroud)
压缩文件大小如下:
07/07/2019 10:18 AM 503,966,751 snapshot-20190707.zip
Run Code Online (Sandbox Code Playgroud)
压缩文件的内容为:
07/07/2019 09:53 AM 67 database.sha1
07/07/2019 09:51 AM 4,508,840,068 database.sql
07/07/2019 09:53 AM 74 database_schema.sha1
07/07/2019 09:51 AM 36,386 database_schema.sql
07/07/2019 09:51 AM 45,280 backup.log
Run Code Online (Sandbox Code Playgroud)
如果我尝试提取4GB文件,则会遇到一个异常,该异常看上去与64位zip文件的Java 7异常完全相同:
C:\Users\user\Desktop>jar xvf snapshot-20190707.zip database.sql
java.util.zip.ZipException: invalid CEN header (bad signature)
at java.util.zip.ZipFile.open(Native Method)
at …Run Code Online (Sandbox Code Playgroud) 我有一个方法(List<Book> getListWithPrefixInName(List<Book> books)),它接受一个集合作为输入并使用每个集合对象执行一个转换。而且我不希望这些更改反映在已转移的集合上,而只是返回修改后的集合。因为我需要我的原始收藏。
因此,我认为只需创建一个新集合即可复制:
List<Book> clone = new ArrayList<>(books);
Run Code Online (Sandbox Code Playgroud)
但是我怎么错...我的代码:
public class App {
public static final String PREFIX = "PREFIX";
public static void main(String[] args) {
List<Book> books = new ArrayList<>();
books.add(Book.of(1L, "The Catcher in the Rye"));
books.add(Book.of(2L, "The Green Mile"));
List<Book> booksWithPrefix = getListWithPrefixInName(books);
for (Book book : books) {
if (book.getName().contains(PREFIX)) {
System.out.println(String.format("original book: '%s' have been changed", book));
}
}
}
public static List<Book> getListWithPrefixInName(List<Book> books) {
List<Book> clone = new ArrayList<>(books); // I …Run Code Online (Sandbox Code Playgroud) 我经常有一个问题Optional和相似的类Option,Try,Either从VAVR例如。
假设我有一些Optional,如果它为空,我想立即从一个方法中返回(无例外,因为我的方法Optional也在返回,所以getOrElseThrow不在图片之列),如果存在,我想进一步处理它。
public Optional<Integer> converter() {
Optional<String> opt = getSomething();
if(!opt.isPresent())
return Optional.empty();
String value = opt.get();
// some manipulations on value, such as map and flatMap would cause a huge mess
return Integer.parseInt(value);
}
Run Code Online (Sandbox Code Playgroud)
我只需要在值为空的情况下立即返回,就不能建立mapand的链flatMap。整个痛苦都在做.get()。有点像getOrElseThrow,但是用return代替throw会很棒- getOrElseReturn。显然在Java中是不可能的,因此我考虑在Kotlin中尝试此操作。
fun safeOptional(): Optional<Int> {
val extracted = Optional.of("123")
.getOrElseReturn { return Optional.empty() }
val …Run Code Online (Sandbox Code Playgroud) 有列表View2对象,我想添加Id的View2对象List<Integer> Ids。我想用单行代码处理以上操作。
class View1{
List<Integer> Ids;
}
class View2{
Integer Id;
}
List<View2> views2 = getViews()
Run Code Online (Sandbox Code Playgroud)
想要以下内容。
view1.setIds(view2.forEach(s -> s.getId()));
Run Code Online (Sandbox Code Playgroud) java ×10
java-8 ×10
collections ×3
biginteger ×1
clone ×1
interface ×1
jar ×1
java-11 ×1
java-12 ×1
java-stream ×1
kotlin ×1
lambda ×1
large-files ×1
zip ×1