Tag: java 8

Collectors.toList()返回什么样的List <E>?

我正在阅读“Lambda:Libraries”(图书馆版)的状态 ,并对一个声明感到惊讶: 根据Streams部分,有以下几点: List<Shape> blue = shapes.stream() .filter(s -> s.getColor() == BLUE) .collect(Collectors.toList()); 该文件没有说明实际是什么shapes ,我不知道它是否重要。 令我困惑的是:这个代码块返回什么样的具体List ? 它将variables分配给List<Shape> ,这是完全正确的。 stream()和filter()决定使用什么样的列表。 Collectors.toList()既不指定List的具体types。 那么,这里使用了List 具体types(子类)呢? 有任何保证吗?

是否允许/build议重用收集器?

我在代码中有很多地方可以做: someStream.collect(Collectors.toList()) Collectors.toList()在每个用途上创build一个新的收集器。 这就引出了一个问题,如果允许和可取的做一些事情,比如: private final static Collector<…> TO_LIST = Collectors.toList() 对于我使用的每种types,然后使用单个收集器: someStream.collect(TO_LIST) 当需要收集器时。 由于收集器是无状态的,只是function和特性的集合,所以我认为它应该起作用,但是OTOH, Collectors.toList()会在每次调用时创build一个新的CollectorImpl<> 。 重复使用收集器有什么缺点?

使用Java 8减less链接的最佳方式

我有下面的代码,我试图改善: BigDecimal total = entity.getAssociate().stream().map(Associates::getPropertyA) .reduce(BigDecimal.ZERO, BigDecimal::add); total = entity.getAssociate().stream().map(Associates::getPropertyB) .reduce(total, BigDecimal::add); total = entity.getAssociate().stream().map(Associates::getPropertyC) .reduce(total, BigDecimal::add); total = entity.getAssociate().stream().map(Associates::getPropertyD) .reduce(total, BigDecimal::add); 它的工作,但它真的觉得有一个更好的办法做到这一点。 有人可以在这个问题上给我启发吗?

在Java 8中使用MetaSpace有什么用?

我知道他们在Java 8中用MetaSpace取代了PermGen。但是我有几个问题: 默认情况下,MetaSpace是否收集了GC? 即使是PermGen也是通过添加如-XX:+CMSClassUnloadingEnabled类的参数来收集GC的,那么是什么使得MetaSpace比PermGen更好呢? MetaSpace是基于本地内存的,所以它将java对象保留在磁盘而不是VM上? 即使MetaSpace可以用尽内存? 如果是这样,我会得到OutOfMemoryException 。 默认情况下,MetaSpace可以增加内存? 提前致谢

Java 8不安全:xxxFence()指令

在Java 8中,三个内存屏障指令被添加到Unsafe类( 源 )中: /** * Ensures lack of reordering of loads before the fence * with loads or stores after the fence. */ void loadFence(); /** * Ensures lack of reordering of stores before the fence * with loads or stores after the fence. */ void storeFence(); /** * Ensures lack of reordering of […]

使用Java8中的时区格式LocalDateTime

我有这个简单的代码: DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z"); LocalDateTime.now().format(FORMATTER) 然后我会得到以下例外: java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: OffsetSeconds at java.time.LocalDate.get0(LocalDate.java:680) at java.time.LocalDate.getLong(LocalDate.java:659) at java.time.LocalDateTime.getLong(LocalDateTime.java:720) at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298) at java.time.format.DateTimeFormatterBuilder$OffsetIdPrinterParser.format(DateTimeFormatterBuilder.java:3315) at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2182) at java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1745) at java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1719) at java.time.LocalDateTime.format(LocalDateTime.java:1746) 如何解决这个问题?

如何在Java 8中获取UTC + 0date?

我在Java中的Date类有问题。 date类返回本地机器的date,但我需要UTC-0。 我GOOGLE了,find了很好的JavaScript解决scheme,但没有用的Java。 如何在Java 8中获取UTC + 0date?

在Java8中引入lambdas会改变或影响哪个GoFdevise模式?

许多人声称,GoFdevise模式的最大部分只是缺乏头等function的解决方法。 现在Java即将获得lambdaexpression式,那么这些模式中的哪些将受到它们的影响? 哪些可以大大简化或泛化? 哪些基本上保持不变? 任何实际的例子是受欢迎的

注释Lambdaexpression式的function界面

Java 8引入了Lambdaexpression式和Type Annotations 。 使用types注释,可以像下面那样定义Java注释: @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE_USE) public @interface MyTypeAnnotation { public String value(); } 然后可以在任何types的引用上使用这个注解,例如: Consumer<String> consumer = new @MyTypeAnnotation("Hello ") Consumer<String>() { @Override public void accept(String str) { System.out.println(str); } }; 这是一个完整的例子,使用这个注释来打印“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 { […]

为什么.stream()。parallel()做同样的事情时,存在Collection.parallelStream()?

在Java 8中,Collection接口扩展了两个返回Stream<E> : stream()返回一个顺序stream, parallelStream()返回一个可能并行的stream。 stream本身也有一个parallel()方法返回一个等效的并行stream(或者将当前stream改变为并行或者创build一个新stream)。 重复有明显的缺点: 这很混乱。 一个问题询问是否需要调用parallelStream()。parallel()来确保该stream是并行的 ,因为parallelStream()可能会返回一个顺序stream。 为什么parallelStream()存在,如果它不能保证? 反过来也是令人困惑的 – 如果parallelStream()返回一个顺序stream,可能有一个原因(例如,一个固有的顺序数据结构,并行stream是一个性能陷阱)。 Stream.parallel()应该为这样的stream做什么? (UnsupportedOperationException不被parallel()的规范所允许。) 如果现有实现具有名称相似的方法,且返回types不兼容,则向接口添加方法可能会产生冲突。 除了stream()之外,还增加了parallelStream(),使得获得增益的风险加倍。 (请注意,parallelStream()是在一个刚刚命名为parallel(),虽然我不知道是否重命名,以避免名称冲突或其他原因。) 为什么在调用Collection.stream()时存在Collection.parallelStream()。parallel()做同样的事情?