Questions tagged «java-8»

对于2014年3月18日发行的Java平台的第8版(内部版本1.8)特定于Java 8的问题,请使用此标记。在大多数情况下,您还应该指定java标记。

4
为现有流添加新价值
有没有一种向现有价值添加新价值的好方法Stream?我能想象的是这样的: public <T> Stream<T> addToStream(Stream<T> stream, T elem ) { List<T> result = stream.collect(Collectors.toList()); result.add(elem); return result.stream(); } 但我正在寻找可以在lambda表达中使用的更简洁的内容,而无需冗长。 当我尝试实施PECS原理时出现了另一个问题: public <T> Stream<? super T> addToStream(Stream<? super T> stream, T elem ) { List<? super T> result = stream.collect(Collectors.toList()); //error result.add(elem); return result.stream(); } 似乎通配符不起作用Stream.collect,我想知道为什么。提前致谢。
78 java  java-8  wildcard 

2
为什么\ R在Java 8和Java 9之间的正则表达式中表现不同?
以下代码在Java 8和9中都可以编译,但是行为不同。 class Simple { static String sample = "\nEn un lugar\r\nde la Mancha\nde cuyo nombre\r\nno quiero acordarme"; public static void main(String args[]){ String[] chunks = sample.split("\\R\\R"); for (String chunk: chunks) { System.out.println("Chunk : "+chunk); } } } 当我使用Java 8运行它时,它返回: Chunk : En un lugar de la Mancha de cuyo …
78 java  regex  unicode  java-8  java-9 

3
有没有办法比较lambda?
说我有一个使用lambda表达式(闭包)定义的对象列表。有没有一种方法可以检查它们以便进行比较? 我最感兴趣的代码是 List<Strategy> strategies = getStrategies(); Strategy a = (Strategy) this::a; if (strategies.contains(a)) { // ... 完整的代码是 import java.util.Arrays; import java.util.List; public class ClosureEqualsMain { interface Strategy { void invoke(/*args*/); default boolean equals(Object o) { // doesn't compile return Closures.equals(this, o); } } public void a() { } public void …
78 java  lambda  java-8 

9
Java 8单声道
为了帮助理解monad是什么,有人可以使用Java提供示例吗?有可能吗? 如果您从此处http://jdk8.java.net/lambda/下载预发行版本的兼容lambda的JDK8,则可以使用Java使用Lambda表达式。 下面显示了使用此JDK的lambda示例,有人可以提供相对简单的monad吗? public interface TransformService { int[] transform(List<Integer> inputs); } public static void main(String ars[]) { TransformService transformService = (inputs) -> { int[] ints = new int[inputs.size()]; int i = 0; for (Integer element : inputs) { ints[i] = element; } return ints; }; List<Integer> inputs = new ArrayList<Integer>(5) …
78 java  java-8  monads  optional 



3
为什么此Java 8程序无法编译?
该程序可以在Java 7(或带有的Java 8 -source 7)中很好地编译,但是不能与Java 8一起编译: interface Iface<T> {} class Impl implements Iface<Impl> {} class Acceptor<T extends Iface<T>> { public Acceptor(T obj) {} } public class Main { public static void main(String[] args) { Acceptor<?> acceptor = new Acceptor<>(new Impl()); } } 结果: Main.java:10: error: incompatible types: cannot infer type …

3
Collectors.toMap()keyMapper —更简洁的表达吗?
我正在尝试在以下Collectors.toMap()调用中为“ keyMapper”函数参数提供一个更简洁的表达式: List<Person> roster = ...; Map<String, Person> map = roster .stream() .collect( Collectors.toMap( new Function<Person, String>() { public String apply(Person p) { return p.getLast(); } }, Function.<Person>identity())); 看来我应该能够使用lambda表达式内联它,但是我无法提出一个可以编译的表达式。(我对lambda很陌生,所以这并不奇怪。) 谢谢。 ->更新: 如已接受的答案中所述 Person::getLast 是我一直在寻找的东西,也是我尝试过的东西。但是,问题是夜间出现的Eclipse 4.3的BETA_8夜间构建-标记为错误。从命令行编译时(我应该在发布之前完成该工作)。因此,该到eclipse.org提交错误了。 谢谢。

7
Java 8 Map中的putIfAbsent和computeIfAbsent有什么区别?
他们读了一篇有趣的文章,声称这两个功能之间的区别是: 如果Map中尚未存在指定的Key,则两个函数都希望添加一个元素。 putIfAbsent添加具有指定值的元素,而computeIfAbsent添加具有使用键计算的值的元素。 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/ 我还没准备好理解有什么区别,请您详细说明这两个功能?
77 java  java-8 

4
Java8将java.util.Date转换为java.time.ZonedDateTime
我得到以下异常而试图转换java.util.Date到java.time.LocalDate。 java.time.DateTimeException: Unable to obtain ZonedDateTime from TemporalAccessor: 2014-08-19T05:28:16.768Z of type java.time.Instant 代码如下: public static Date getNearestQuarterStartDate(Date calculateFromDate){ int[] quaterStartMonths={1,4,7,10}; Date startDate=null; ZonedDateTime d=ZonedDateTime.from(calculateFromDate.toInstant()); int frmDateMonth=d.getMonth().getValue(); 我ZonedDateTime上课的方式有问题吗? 根据文档,这应将java.util.Date对象转换为ZonedDateTime。上面的日期格式是标准日期? 我必须在Joda时间回退吗? 如果有人可以提供一些建议,那就太好了。

1
Collectors.toSet()和HashSet
采取以下示例代码行: Set<String> someSet = someColletion.stream().map(p -> p.toString()).collect(Collectors.toSet()); 我想要一个HashSet。将调试器用于代码,我确实得到了HashSet。我看了看java.util.stream.Collectors.toSet()下面的代码: public static <T> Collector<T, ?, Set<T>> toSet() { return new CollectorImpl<>((Supplier<Set<T>>) HashSet::new, Set::add, (left, right) -> { left.addAll(right); return left; }, CH_UNORDERED_ID); } 合同担保a Set,实施决定a HashSet; 似乎是合理的。但是,我的实现需要aHashSet而不是仅任何old保证的恒定时间查找Set。如果的实现toSet()决定使用FooSet完全在其权限范围内的a ,则我的实现受到了损害。 解决此问题的最佳实践是什么?

2
为什么Java 7中的StringBuilder#append(int)比Java 8中的快?
在调查使用以及将整数原语转换为字符串的辩论时"" + n,Integer.toString(int)我写了这个JMH微基准测试: @Fork(1) @OutputTimeUnit(TimeUnit.MILLISECONDS) @State(Scope.Benchmark) public class IntStr { protected int counter; @GenerateMicroBenchmark public String integerToString() { return Integer.toString(this.counter++); } @GenerateMicroBenchmark public String stringBuilder0() { return new StringBuilder().append(this.counter++).toString(); } @GenerateMicroBenchmark public String stringBuilder1() { return new StringBuilder().append("").append(this.counter++).toString(); } @GenerateMicroBenchmark public String stringBuilder2() { return new StringBuilder().append("").append(Integer.toString(this.counter++)).toString(); } @GenerateMicroBenchmark public …


3
递归ConcurrentHashMap.computeIfAbsent()调用永远不会终止。错误还是“功能”?
前段时间,我写了一篇关于Java 8函数式递归计算斐波纳契数的方法,其中包括ConcurrentHashMap缓存和新的有用computeIfAbsent()方法: import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class Test { static Map<Integer, Integer> cache = new ConcurrentHashMap<>(); public static void main(String[] args) { System.out.println( "f(" + 8 + ") = " + fibonacci(8)); } static int fibonacci(int i) { if (i == 0) return i; if (i == 1) return …

1
使用默认实现的null安全映射比较器
是否有内置的可能性在Java 8中创建空安全的映射比较器而无需编写自己的实现Comparator? 运行以下代码时,它会导致NPE,因为的keyExtractor参数Comparator.comparing()可能返回null值: public class ToSort { private String sortBy; public ToSort(String sortBy) { this.sortBy = sortBy; } public String getSortBy() { return sortBy; } public static void main(String[] args) { // mapping comparator Comparator<ToSort> comp = Comparator.comparing(ToSort::getSortBy); SortedSet<ToSort> set = new TreeSet<>(comp); ToSort o1 = new ToSort("1"); ToSort o2 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.