Tag: java 8

从Java 8stream中断或返回forEach?

当对Iterable使用外部迭代时 ,我们使用break或者从增强的for-each循环return : for (SomeObject obj : someObjects) { if (some_condition_met) { break; // or return obj } } 我们如何使用Java 8 lambdaexpression式中的内部迭代来break或return : someObjects.forEach(obj -> { //what to do here? })

Collection.stream()。forEach()和Collection.forEach()之间有什么区别?

我明白,使用.stream() ,我可以使用像.filter()或使用并行stream链操作。 但是,如果我需要执行小操作(例如,打印列表元素),它们之间有什么区别呢? collection.stream().forEach(System.out::println); collection.forEach(System.out::println);

如何总结与javastream整数列表?

我想总结一个整数列表。 它的工作原理如下,但语法不正确。 代码能被优化吗? Map<String, Integer> integers; integers.values().stream().mapToInt(i -> i).sum();

使用JDK8的WebService客户端生成错误

我需要在我的项目中使用Web服务。 我使用NetBeans,所以我右键单击我的项目,并试图添加一个新的“Web服务客户端”。 上次我检查,这是创build一个Web服务客户端的方式。 但它导致了一个AssertionError,说: java.lang.AssertionError:org.xml.sax.SAXParseException; systemId:jar:file:/path/to/glassfish/modules/jaxb-osgi.jar!/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd; lineNumber:52; 列号:88; schema_reference:无法读取模式文档“ xjc.xsd ”,因为由于accessExternalSchema属性设置的限制,不允许“文件”访问。 NetBeans的默认Java平台是JDK8(甲骨文的正式版本),所以当我改变我的netbeans.conf文件,并使JDK7(从Oracle,以及)作为我的默认,一切工作正常。 所以我认为问题在于JDK8。 这是我的java -version输出: java版本“1.8.0” Java(TM)SE运行时环境(build 1.8.0-b132) Java HotSpot(TM)64位服务器虚拟机(构build25.0-b70,混合模式) 现在,我将JDK7作为默认的Java平台。 如果有办法让JDK8工作,请分享。 提前致谢。

在JDK 8中删除PermGen

我已经安装了JDK 8并尝试运行Eclipse。 我收到以下警告消息: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0 忽略这个论点的原因是什么?

Java 8接口方法中不允许“同步”的原因是什么?

在Java 8中,我可以很容易地写出: interface Interface1 { default void method1() { synchronized (this) { // Something } } static void method2() { synchronized (Interface1.class) { // Something } } } 我将得到我可以在类中使用的完全同步语义。 但是我不能在方法声明中使用synchronized修饰符: interface Interface2 { default synchronized void method1() { // ^^^^^^^^^^^^ Modifier 'synchronized' not allowed here } static synchronized void method2() { // ^^^^^^^^^^^^ Modifier 'synchronized' […]

为什么Iterable <T>不提供stream()和parallelStream()方法?

我想知道为什么Iterable接口不提供stream()和parallelStream()方法。 考虑以下课程: public class Hand implements Iterable<Card> { private final List<Card> list = new ArrayList<>(); private final int capacity; //… @Override public Iterator<Card> iterator() { return list.iterator(); } } 这是一个手牌的执行,因为你可以在玩牌交换游戏时手中持有牌。 本质上它包装一个List<Card> ,确保最大的容量,并提供一些其他有用的function。 直接作为List<Card>实施它更好。 现在,为了方便起见,我认为实现Iterable<Card>会很好,如果你想循环它,你可以使用增强的for循环。 (我的Hand类也提供了get(int index)方法,因此我认为Iterable<Card>是合理的。) Iterable接口提供了以下(遗漏的javadoc): public interface Iterable<T> { Iterator<T> iterator(); default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : […]

为什么一次性Javastream?

与C#的IEnumerable ,在执行stream水线可以执行多次的情况下,Java中的stream只能被“迭代”一次。 任何对terminal操作的调用都会closuresstream,导致stream不可用。 这个“function”带走了很多权力。 我想这是不是技术性的原因。 这个奇怪的限制背后的devise考虑是什么? 编辑:为了演示我在说什么,请考虑以下在C#中的快速sorting实现: IEnumerable<int> QuickSort(IEnumerable<int> ints) { if (!ints.Any()) { return Enumerable.Empty<int>(); } int pivot = ints.First(); IEnumerable<int> lt = ints.Where(i => i < pivot); IEnumerable<int> gt = ints.Where(i => i > pivot); return QuickSort(lt).Concat(new int[] { pivot }).Concat(QuickSort(gt)); } 可以肯定的是,我并不是主张这是一个快速sorting的好实现! 然而,这是lambdaexpression式与stream操作相结合的performance力的一个很好的例子。 而且不能用Java来完成! 我什至不能问一个stream是否是空的,而不会使其无法使用。

当Javadoc标签不完整时,Maven不能在Java 8中工作

由于我使用Maven,我已经能够构build和安装在我的本地存储库项目,具有不完整的Javadoc标签(例如,一个缺less的参数)。 然而,自从我迁移到Java 8(1.8.0-ea-b90)以来,Maven对于缺失的文档标签是绝对严格的,并且在尝试构build或安装Javadoc不是Javadoc的项目时,显示出大量有关Javadoc问题的Javadoc错误“完善”。 我试图编译并安装在本地存储库中的一些项目是我无法控制的第三方项目。 所以,在所有这些项目中修复所有Javadoc的解决方法在我的场景中似乎不是可行的。 这是我在我的项目中执行mvn clean package install时输出的一小部分: [INFO] ———————————————————————— [INFO] BUILD FAILURE [INFO] ———————————————————————— [INFO] Total time: 9.026s [INFO] Finished at: Mon Apr 08 21:06:17 CEST 2013 [INFO] Final Memory: 27M/437M [INFO] ———————————————————————— [ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9:jar (attach-javadocs) on project jpc: MavenReportException: Error while creating archive: [ERROR] Exit code: 1 – […]

为什么在Java 8接口方法中不允许“final”?

Java 8的最有用的function之一是接口上的新的default方法。 基本上有两个原因(可能还有其他原因)为什么被引入: 提供实际的默认实现。 示例: Iterator.remove() 允许JDK API进化。 例如: Iterable.forEach() 从APIdevise者的angular度来看,我希望能够在接口方法上使用其他修饰符,例如final 。 这在添加便利方法时很有用,可以防止实现类中的“意外”覆盖: interface Sender { // Convenience method to send an empty message default final void send() { send(null); } // Implementations should only implement this method void send(String message); } 如果Sender是一个class级,以上是已经很普遍的做法: abstract class Sender { // Convenience method to send an empty message […]