Questions tagged «java-8»

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

3
参数中的Java类型提升
我偶然发现了以下片段: public class ParamTest { public static void printSum(int a, double b) { System.out.println("In intDBL " + (a + b)); } public static void printSum(long a, long b) { System.out.println("In long " + (a + b)); } public static void printSum(double a, long b) { System.out.println("In doubleLONG " + (a …

2
当数字等于0时,如何跳过流的limit(number)调用?
我有一些Java代码可以提供来自的对象items。它基于maxNumber: items.stream() .map(this::myMapper) .filter(item -> item != null) .limit(maxNumber) .collect(Collectors.toList()); 它可以正常工作,但是问题是:当maxNumber == 0?时,是否有一种跳过限制的方法? 我知道我可以这样做: if (maxNumber == 0) { items.stream() .map(this::myMapper) .filter(item -> item != null) .collect(Collectors.toList()); } else { items.stream() .map(this::myMapper) .filter(item -> item != null) .limit(maxNumber) .collect(Collectors.toList()); } 但是,也许有更好的方法,您想到什么了吗?


2
箭头(->)运算符的优先级/优先级最低,还是分配/组合分配的优先级最低?
JLS: 的最低优先级操作者是lambda表达式的箭头( - >) ,接着由赋值运算符。 遵循哪个方向(增加优先级,减少优先级)?-“跟随”是指分配的优先级较高还是较低(相对于箭头运算符)?我猜想,这是因为“最低”(箭头)表示绝对最低。 据我了解,箭头(->)应该在此普林斯顿的最底部运算符优先级表的(位于所有赋值运算符的下方),因此箭头(->)的优先级为0(零)(根据该表)。 我的理解正确吗? 考试托盘似乎说箭头优先级至少与分配相同。此外,还阐明了箭头的关联性是Left-> To-> Right(与分配不同)。我没有找到JLS的箭头关联性报价。 我一直认为分配优先级原则上最低。


3
+0和-0显示int和float数据的不同行为
我读过这篇文章,负数和正数为零。 据我了解,以下代码应该给出true 和true 作为输出。 但是,它是给出false和true作为输出。 我正在将负零与正零进行比较。 public class Test { public static void main(String[] args) { float f = 0; float f2 = -f; Float F = new Float(f); Float F1 = new Float(f2); System.out.println(F1.equals(F)); int i = 0; int i2 = -i; Integer I = new Integer(i); Integer I1 …
16 java  java-8 

5
如何从地图生成具有不同值的地图(并使用BinaryOperator使用右键)?
我有一张地图Map<K, V>,我的目标是删除重复的值并Map<K, V>再次输出相同的结构。如果发现重复的值,则必须k从两个键(k1和k1)中选择一个保存这些值的键(),因此,假定BinaryOperator<K>提供k了k1并k2可用。 输入和输出示例: // Input Map<Integer, String> map = new HashMap<>(); map.put(1, "apple"); map.put(5, "apple"); map.put(4, "orange"); map.put(3, "apple"); map.put(2, "orange"); // Output: {5=apple, 4=orange} // the key is the largest possible 用我的尝试Stream::collect(Supplier, BiConsumer, BiConsumer)是位非常笨拙,包含可变操作,比如Map::put和Map::remove我想避免: // // the key is the largest integer possible (following the example above) final …

1
运算符“ +”不能应用于对象和字符串
如下代码: void someMethod(Object value) { String suffix = getSuffix(); if (suffix != null) value += suffix; [...] } 在JDK 8(使用-source 1.6)中编译时没有错误,但是在JDK 6中失败并显示以下错误消息: Operator '+' cannot be applied to java.lang.Object and java.lang.String 虽然我确实了解错误的根源,但为什么要使用JDK 8进行编译?这在任何地方都有记录吗?
12 java  java-8  javac  java-6 

2
Java指派执行程序由于某种原因失败时,停止执行程序服务
我需要某种服务,该服务将在1秒的间隔内同时运行1分钟1分钟。 如果其中一项任务失败,则我想停止该服务,并停止运行该服务的每个任务,并带有某种指示错误的指示器,否则,如果在一分钟后一切正常,则该服务将停止并指示所有指示器均正常运行。 例如,我有2个功能: Runnable task1 = ()->{ int num = Math.rand(1,100); if (num < 5){ throw new Exception("something went wrong with this task,terminate"); } } Runnable task2 = ()->{ int num = Math.rand(1,100) return num < 50; } ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2); task1schedule = scheduledExecutorService.scheduleAtFixedRate(task1, 1, 60, TimeUnit.SECONDS); task2schedule = …

2
如何理解此Java 8 Stream collect()方法?
我试图将一个int数组转换为List,并且采取了使用Java 8 Stream的陌生路线,并提出了这个建议。 Arrays.stream(arr).boxed().collect(Collectors.toList()); 我仍然很难完全理解这条线, 为什么Collectors.toList()在这种情况下返回一个ArrayList<Integer>实现List接口?为什么不LinkedList<Integer>符合List接口的通用类呢?我找不到这事,除了简短提的ArrayList 这里,在API说明部分。 左边的 意思是什么?显然是通用返回类型(在我的代码中)。而且我认为是该方法的泛型类型参数,但是如何指定它们呢?我查看了Collector界面文档,但无法吸收它。 Stream.collect()RArrayList<Integer><R, A>

2
您可以重新平衡大小未知的不平衡分离器吗?
我想使用a Stream来并行处理一组未知数量的远程存储的JSON文件的异类(文件数量事先未知)。文件的大小可以相差很大,从每个文件1个JSON记录到其他文件中的100,000个记录。一个JSON记录在这种情况下是指表示为文件中的一条线的自包含JSON对象。 我真的很想为此使用Streams,所以我实现了这一点Spliterator: public abstract class JsonStreamSpliterator<METADATA, RECORD> extends AbstractSpliterator<RECORD> { abstract protected JsonStreamSupport<METADATA> openInputStream(String path); abstract protected RECORD parse(METADATA metadata, Map<String, Object> json); private static final int ADDITIONAL_CHARACTERISTICS = Spliterator.IMMUTABLE | Spliterator.DISTINCT | Spliterator.NONNULL; private static final int MAX_BUFFER = 100; private final Iterator<String> paths; private JsonStreamSupport<METADATA> reader = …

3
自定义排序方式是A排在a之前,B排在b之前
我有一个这样的颜色列表: 粉色,蓝色,红色,蓝色,灰色,绿色,紫色,黑色...等 List<String> listOfColors = Arrays.asList("Pink", "Blue", "Red", "blue", "Grey", "green", "purple", "black"); 有一些中间操作,例如过滤一些水果色,现在剩下过滤结果要按顺序排序了: 蓝色,黑色,蓝色,灰色,绿色,粉红色,紫色,红色 我努力了 : List<String> collect = listOfColors.stream().sorted(String::compareToIgnoreCase) .collect(Collectors.toList()); 它不能按预期方式工作。 输出如下: 黑色,蓝色,蓝色,绿色,灰色,粉红色,紫色,红色 我想要以下内容: 蓝色,黑色,蓝色,灰色,绿色,粉红色,紫色,红色

5
如何在Java中查找一年的总周数?
我正在做一个项目。我应该在那里找到一年的总周数。我尝试使用以下代码,但得到的答案是错误的:2020年有53周,但是这段代码却有52周。 这段代码在哪里出错了? package com.hib.mapping; import java.time.LocalDate; import java.time.temporal.WeekFields; import java.util.Calendar; import java.util.GregorianCalendar; import org.joda.time.DateTime; public class TestWeek { public static void main(String args[]) { System.out.println(getWeeks()); } public static int getWeeks() { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2020); cal.set(Calendar.MONTH, Calendar.JANUARY); cal.set(Calendar.DAY_OF_MONTH, 1); GregorianCalendar gregorianCalendar = new GregorianCalendar(); int weekDay = cal.get(Calendar.DAY_OF_WEEK) …

1
为什么在使用不相关的接口类型调用时,编译器为什么选择带有类类型参数的通用方法?
考虑以下两个类和接口: public class Class1 {} public class Class2 {} public interface Interface1 {} 为什么第二个调用mandatory使用Class2,如果getInterface1和Interface1没有关系来调用重载方法Class2? public class Test { public static void main(String[] args) { Class1 class1 = getClass1(); Interface1 interface1 = getInterface1(); mandatory(getClass1()); // prints "T is not class2" mandatory(getInterface1()); // prints "T is class2" mandatory(class1); // prints "T is …

1
Java-8中的方法参考和泛型
我面临方法引用与泛型类型结合使用的问题。 我们有需要调用重载方法的代码,但是由于错误而失败: 无法解析值m1() 我简化了我的问题,以明确问题出在哪里。 以下代码失败: public class Test { void test() { // Getting error here setValue(C1::m1, Integer.ONE); } <E extends I1, T> void setValue(BiConsumer<E, T> cons, T value) { } } interface I1 { } class C1 implements I1 { void m1(Integer value) { } void m1(int value) { …
11 java  generics  lambda  java-8 

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.