Tag: java 8

Java 8中的Java“静态导入”与“导入静态”

我试图在Java上使用静态导入,但我写错了 static import java.lang.System.out; 并编译代码(虽然找不到“out”符号),没有语法错误。 那么,“静态导入”实际上意味着什么呢?

比Stream.peek()更好的方法

“peek”主要用于调试。 如果我想在流的中间调用流上的方法,这会改变流对象的状态。 Stream.of(“Karl”, “Jill”, “Jack”).map(Test::new).peek(t->t.setLastName(“Doe”)); 我可以: Stream.of(“Karl”, “Jill”, “Jack”).map(Test::new).map(t->{t.setLastName(“Doe”); return t;}); 但这看起来很难看。 这是不应该做的事还是有更好的方法来做到这一点? 编辑: forEach工作除了它是一个终端操作,因此你不能继续在流上工作。 然后我希望制作一个Collection,do forEach,然后再开始流式传输Collection。 编辑: map(Class::processingMethod)是我现在正在做的,但由于processingMethod只是返回this ,它似乎是对map的误用。 此外,它并不像业务逻辑那样真正地读取。 最终编辑:我接受了@Holger的回答。 不能期望Stream.peek处理Stream上的所有元素,因为它不是终端操作。 map 。 即使您可能已经使用某些内容来终止您的流,这些内容可以保证它将处理所有操作,但您不应该编写希望每个用户都这样做的代码。 因此,要进行处理,您应该在Collection上使用forEach ,然后根据需要再次开始流式传输。

Mockito returnFirstArg()使用

我已经开始使用Mockito AdditionalAnswers#returnsFirstArg ,这很棒: when(myMock.myFunction(anyString())).then(returnsFirstArg()); 但我想知道是否有一种简单的方法来提取输入参数,以便在例如构造函数中使用: when(myMock.myFunction(anyString())).thenReturn(new MyObject((String)returnsFirstArg())); (这显然不起作用……)

没有IDEA注释附加到JDK 1.8(C:\ …),将找不到一些问题

在Android Studio 3.1.2中,我突然在编辑器顶部的黄色磁带框中收到以下消息: 没有IDEA注释附加到JDK 1.8(C:\ Program Files \ Android \ Android Studio \ jre),将找不到一些问题 我在编辑配置中也有一个警告: 找不到默认活动 我该如何解决这些问题?

为什么Collectors.toList()不能处理原始集合?

(这可能与https://stackoverflow.com/a/30312177/160137有关,但我恐怕还是没有得到它。所以我这样问我的问题,希望它能够得出一个我可以更容易理解的答案。) 通常,当我有一个Stream时,我可以使用Collectors类中的一个静态方法将其转换为集合: List strings = Stream.of(“this”, “is”, “a”, “list”, “of”, “strings”) .collect(Collectors.toList()); 然而,类似的过程不适用于原始流,正如其他人注意到的那样: IntStream.of(3, 1, 4, 1, 5, 9) .collect(Collectors.toList()); // doesn’t compile 我可以这样做: IntStream.of(3, 1, 4, 1, 5, 9) .boxed() .collect(Collectors.toList()); 或者我可以这样做: IntStream.of(3, 1, 4, 1, 5, 9) .collect(ArrayList::new, ArrayList::add, ArrayList::addAll); 问题是,为什么Collectors.toList()只对原始流执行此操作? 难道没有办法指定包装类型吗? 如果是这样,为什么这不起作用: IntStream.of(3, 1, 4, 1, 5, 9) .collect(Collectors.toCollection(ArrayList::new)); // nope 任何见解将不胜感激。

当在静态上下文中使用实例方法时,为什么javac会发出“错误:类中的方法无法应用于给定类型”?

考虑以下(无效)Java程序: public class Test { public static void main(String[] args) { int[] ints = {1, 2, 3, 4, 5}; print(ints); } public void print(int… ints) { for (int i : ints) { System.out.print(i); } } } 我希望有类似这样的错误: Cannot make a static reference to the non-static method print(int[]) from the type Test at Test.main(Test.java:5) 但相反,javac发出: Test.java:5: […]

java.lang.Thread中的新增附加字段,有什么想法?

在Java 8中, java.lang.Thread类有3个新字段: /** The current seed for a ThreadLocalRandom */ @sun.misc.Contended(“tlr”) long threadLocalRandomSeed; /** Probe hash value; nonzero if threadLocalRandomSeed initialized */ @sun.misc.Contended(“tlr”) int threadLocalRandomProbe; /** Secondary seed isolated from public ThreadLocalRandom sequence */ @sun.misc.Contended(“tlr”) int threadLocalRandomSecondarySeed; 正如它在Javadoc中所说的那样,它是由java.util.concurrent.ThreadLocalRandom类专门管理的。 此外,在ThreadLocalRandom它们以非常奇怪的方式使用: SEED = UNSAFE.objectFieldOffset (tk.getDeclaredField(“threadLocalRandomSeed”)); PROBE = UNSAFE.objectFieldOffset (tk.getDeclaredField(“threadLocalRandomProbe”)); SECONDARY = UNSAFE.objectFieldOffset (tk.getDeclaredField(“threadLocalRandomSecondarySeed”)); (在LockSupport类中也LockSupport相同的代码段)。 然后这个偏移在内部用于几个java.concurrent地方。 这个想法是什么? […]

有一种优雅的方法来获取Java中多个方法返回的第一个非null值吗?

你自己已经看过很多次了,我敢肯定: public SomeObject findSomeObject(Arguments args) { SomeObject so = queryFirstSource(args); // the most likely source first, hopefully if (so != null) return so; so = querySecondSource(args); // a source less likely than the first, hopefully if (so != null) return so; so = queryThirdSource(args); // a source less likely than the previous, hopefully if (so […]

Java 8对generics方法的调用含糊不清

我正在将Java7代码移植到Java8,我想出了以下问题。 在我的代码库中,我有两种方法: public static ImmutableSet append(Set set, T elem) { return ImmutableSet.builder().addAll(set).add(elem).build(); } public static ImmutableSet append(Set set, Set elemSet) { ImmutableSet.Builder newSet = ImmutableSet.builder(); return newSet.addAll(set).addAll(elemSet).build(); 编译器在以下测试中返回有关方法附加的模糊匹配的错误: @Test(expected = NullPointerException.class) public void shouldAppendThrowNullPointerForNullSecondSet() { ImmutableSet obj = null; CollectionUtils.append(ImmutableSet.of(1), obj); } 编译错误: 对append的引用是不明确的,CollectionUtils中的方法append(java.util.Set,T)和CollectionUtils中的方法append(java.util.Set,java.util.Set)匹配 如何重写这些函数以使用Java8引入的类型推断?

Java 8设置全局时间格式化程序

我想将自己的DateTimeFormatter设置为全局格式化程序。 当我执行以下行时: ZonedDateTime.now(); 我明白了: 2016-03-30T08:58:54.180-06:00[America/Chicago] 如果我这样做: ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME) 我明白了: Wed, 30 Mar 2016 9:00:06 -0600 我想要上面打印但是上午/下午所以我制作了自定义格式化程序并打印出时间如下: DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern(“EEE, dd MMM yyyy HH:mm:ss a Z”); ZonedDateTime.now().format(FORMATTER); 哪个给了我: Wed, 30 Mar 2016 9:00:06 AM -0600 但我在任何地方都使用这个.now()方法进行日志记录,我不想在代码中的任何地方定义格式化程序。 有没有办法将格式化程序配置为调用.now()方法时使用的默认格式? 我在想spring的配置方法或者什么……