标签: java-8

为什么 Java 14 不是 LTS?

Java 14是非 LTS

考虑到 6 个月发布的新版本序列,并且 8 和 11 是 LTS,Java 14 不应该是下一个 LTS 版本吗?

还是纯粹基于 Java 架构师来决定他们为 LTS 选择哪个?

我确实在网上搜索过,但找不到答案。

java lts java-8 java-11 java-14

54
推荐指数
2
解决办法
2万
查看次数

注释Lambda表达式的功能接口

Java 8引入了Lambda表达式Type Annotations.

使用类型注释,可以定义Java注释,如下所示:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
public @interface MyTypeAnnotation {
    public String value();
}
Run Code Online (Sandbox Code Playgroud)

然后可以在任何类型引用上使用此注释,例如:

Consumer<String> consumer = new @MyTypeAnnotation("Hello ") Consumer<String>() {
    @Override
    public void accept(String str) {
        System.out.println(str);
    }
};
Run Code Online (Sandbox Code Playgroud)

这是一个完整的例子,它使用这个注释来打印"Hello World":

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.AnnotatedType;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

public class Java8Example {
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE_USE)
    public @interface MyTypeAnnotation {
        public String value();
    }

    public static void main(String[] args) {
        List<String> list = Arrays.asList("World!", "Type Annotations!"); …
Run Code Online (Sandbox Code Playgroud)

java lambda annotations java-8

53
推荐指数
1
解决办法
1万
查看次数

Java 8的流:为什么并行流更慢?

我正在玩Java 8的流,无法理解我得到的性能结果.我有2个核心CPU(Intel i73520M),Windows 8 x64和64位Java 8更新5.我正在做简单的字符串流/并行流Strings,发现并行版本有点慢.

Function<Stream<String>, Long> timeOperation = (Stream<String> stream) -> {
  long time1 = System.nanoTime();
  final List<String> list = 
     stream
       .map(String::toLowerCase)
       .collect(Collectors.toList());
  long time2 = System.nanoTime();
  return time2 - time1;
};

Consumer<Stream<String>> printTime = stream ->
  System.out.println(timeOperation.apply(stream) / 1000000f);

String[] array = new String[1000000];
Arrays.fill(array, "AbabagalamagA");

printTime.accept(Arrays.stream(array));            // prints around 600
printTime.accept(Arrays.stream(array).parallel()); // prints around 900
Run Code Online (Sandbox Code Playgroud)

考虑到我有2个CPU内核的事实,并行版本不应该更快吗?有人能给我一个暗示为什么并行版本更慢?

java parallel-processing performance java-8 java-stream

53
推荐指数
3
解决办法
3万
查看次数

在Java 8中MetaSpace有什么用?

我知道他们已经用Java 8中的MetaSpace取代了PermGen.但我几乎没有问题:

  1. MetaSpace默认是GC收集的吗?
  2. 即使PermGen是通过添加args来收集GC -XX:+CMSClassUnloadingEnabled,那么是什么让MetaSpace比PermGen更好?
  3. MetaSpace基于本机内存,因此它将java对象保留在磁盘而不是VM上?
  4. 即使MetaSpace也会耗尽内存?如果是这样,我会得到OutOfMemoryException.
  5. 默认情况下,MetaSpace可以增加内存?

提前致谢

java garbage-collection java-8

53
推荐指数
3
解决办法
4万
查看次数

Java 8 lambdas和匿名内部类之间的性能差异

在Java 8之前,可以通过使用匿名内部类来实现lambda功能.例如:

interface Lambda {
    void doStuff();
}

// ...

public void doWithCallback(Lambda callback) {
    // ...
    callback.doStuff();
}

// ...

doWithCallback(new Lambda { 
    public void doStuff() { 
        // ... 
    } 
});
Run Code Online (Sandbox Code Playgroud)

在性能方面,仍然使用这种方法和使用新的Java 8 lambda之间有区别吗?

java performance closures java-8

53
推荐指数
1
解决办法
1万
查看次数

Java 8日期时间:从ZonedDateTime获取一天的开始

这些之间有什么区别:

zonedDateTime.truncatedTo(ChronoUnit.DAYS);

zonedDateTime.toLocalDate().atStartOfDay(zonedDateTime.getZone());
Run Code Online (Sandbox Code Playgroud)

有理由偏爱另一个吗?

谢谢

java datetime java-8 java-time

53
推荐指数
3
解决办法
4万
查看次数

Java 8流收集集

为了更好地理解新流API我试图转换一些旧代码,但我坚持这个.

 public Collection<? extends File> asDestSet() {
    HashMap<IFileSourceInfo, Set<File>> map = new HashMap<IFileSourceInfo, Set<File>>();
    //...
    Set<File> result = new HashSet<File>();
    for (Set<File> v : map.values()) {
        result.addAll(v);
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我似乎无法为它创建一个有效的收集器:

 public Collection<? extends File> asDestSet() {
    HashMap<IFileSourceInfo, Set<File>> map = new HashMap<IFileSourceInfo, Set<File>>();
    //...
    return map.values().stream().collect(/* what? */);
}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

53
推荐指数
1
解决办法
6万
查看次数

Java 8 Map中putIfAbsent和computeIfAbsent有什么区别?

阅读一篇有趣的文章,这些人声称这两个功能的区别在于:

如果Map中没有指定的Key,则两个函数都希望添加元素.

putIfAbsent添加具有指定Value的元素,而computeIfAbsent添加具有使用Key计算的值的元素. http://www.buggybread.com/2014/10/java-8-difference-between-map.html

我们已经看到putIfAbsent删除了必须定义if语句的必要方法,但是如果获取Java文章真的会损害我们的性能呢?

为了优化这一点,我们不想在我们确定需要它们之前获取文章 - 这意味着在获取文章之前我们需要知道密钥是否缺失. http://www.deadcoderising.com/2017-02-14-java-8-declarative-ways-of-modifying-a-map-using-compute-merge-and-replace/

我还没准备好了解哪些差异可以请你详细说明这两个功能?

java java-8

53
推荐指数
4
解决办法
3万
查看次数

Java Lambda表达式

在Java 8中添加了Lambda表达式.我想理解为什么这很重要.对于尚未接触函数式编程习惯用语的Java程序员来说,这意味着什么?这是否意味着我可以编写性能更好或大规模扩展的代码,或者只是使代码更简洁.或者全部.

java lambda java-8

52
推荐指数
1
解决办法
2万
查看次数

Java 8 LocalDate - 如何获取两个日期之间的所有日期?

是否可以在新java.timeAPI中获取两个日期之间的所有日期

假设我有这部分代码:

@Test
public void testGenerateChartCalendarData() {
    LocalDate startDate = LocalDate.now();

    LocalDate endDate = startDate.plusMonths(1);
    endDate = endDate.withDayOfMonth(endDate.lengthOfMonth());
}
Run Code Online (Sandbox Code Playgroud)

现在我需要startDate和之间的所有日期endDate.

我想要得到daysBetween两个日期并迭代:

long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);

for(int i = 0; i <= daysBetween; i++){
    startDate.plusDays(i); //...do the stuff with the new date...
}
Run Code Online (Sandbox Code Playgroud)

有更好的方法来获取日期吗?

java date java-8 java-time

52
推荐指数
6
解决办法
3万
查看次数