Tag: java 8

如何将参数发送到流中的引用方法(java 8)?

我有一个活动列表(活动),我想确定一个Map(String, DateTime)的表格Map(String, DateTime) (不是Duration或Period;它是必须的Map(String, DateTime)的数据结构。 对于每个活动,在监测期间计算的总持续时间。 Activity类有: activityLabel(String) , startTime(DateTime) , endTime(DateTime) 。 我用joda时间。 这就是我所做的: Map durations = activities.stream().collect(Collectors.toMap( it -> it.activityLabel, it ->new DateTime(0,0,0,0,0,0) //,DateTime::plus )); 我想我应该使用DateTime plus(ReadablePeriod period)或DateTime plus(ReadableDuration duration) ,但我不知道如何将类型为Duration或Period的参数发送到方法引用。 我怎样才能达到这个效果? 编辑:输入: 2011-12-03 01:00:00 2011-12-03 9:00:00睡觉 2011-12-04 03:00:00 2011-12-04 10:30:00睡觉 我应该有输出:睡觉0-0-0 15:30:00(年,月,日,小时,分钟,秒)

使用TomEE Embedded和Java 8进行JSP编译错误

尝试访问在TomEE Embedded中运行的基本JSP文件时,出现内部服务器错误,并显示以下错误消息: org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: [1] in the generated java file: [/tmp/apache-tomee814337484264703144/work/Tomcat/localhost/sample/org/apache/jsp/index_jsp.java] The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files Stacktrace: org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:485) org.apache.jasper.compiler.Compiler.compile(Compiler.java:379) org.apache.jasper.compiler.Compiler.compile(Compiler.java:354) org.apache.jasper.compiler.Compiler.compile(Compiler.java:341) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:662) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:364) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 我正在使用Java 8和(当前)最新版本的TomEE Embedded(1.7.2)。 这些是我的POM文件中的依赖项: org.apache.openejb tomee-embedded 1.7.2 该问题与我的JSP文件的内容无关,因为它基本上是空的: […]

如何在Java中实现Predicate,用于针对任意数量的规则交叉检查String?

这个问题是一个延续: 如何检查输入是否符合Java中的任意数量的规则? 我正在尝试使用Predicates来交叉检查一组返回布尔值的规则/方法的字符串/单词。 但是我在代码中实现它时遇到了困难。 public class CapValidator { /** PRIMARY METHODS **/ private boolean capitalize(String word) { // boolean valid = true; // for (Predicate rule : rules) { // valid = valid && rule.test(word); // } return false; } /** SUPPORT METHODS **/ private boolean isNoun(String word) { // do some logic } private […]

如何创建方法引用列表?

我需要处理一个列表,并为每个项目调用目标对象上的不同方法。 看起来很优雅,我可以创建一个方法引用列表来执行此操作,因此对于列表中的每个索引,我可以调用与其对应的适当方法引用。 private final static List<Consumer> METHODS = (List<Consumer>) Arrays.asList( TargetClass::setValue1, TargetClass::setValue2, TargetClass::setValue3, TargetClass::setValue4, TargetClass::setValue5); 但是,Eclipse会使用错误标记这些错误。此表达式的目标类型必须是function接口 。 现在,TargetClass这里是一个普通的类,而不是一个接口…这是否意味着没有办法完成我在这里尝试做的事情?

流减少不兼容的类型

我正在尝试创建一个包含多个谓词并减少它们的查找程序: public static Collection findOr( Context pContext, Class pClass, Predicate… pPredicates) { Predicate lReducedPredicate = Arrays.asList(pPredicates).stream().reduce(Predicate::or).orElse(r -> false); return find(pContext, pClass, lReducedPredicate); } 不幸的是我得到以下编译错误: Predicate lReducedPredicate = Arrays.asList(pPredicates).stream()。reduce(Predicate :: or).orElse(r – > false); 不兼容的类型:谓词不能转换为谓词,其中T是一个类型变量:T扩展在方法findOr(Context,Class,Predicate …)中声明的BusinessInterface,其中CAP#1,CAP#2是新的类型变量:CAP# 1扩展Object super:T从捕获? 超级T CAP#2扩展了Object super:T从捕获? 超级T 我在Eclipse中没有错误,我不知道出了什么问题。 任何帮助真的很感激:)。

在维护对Java 7的支持的同时使用@Repeatable

Java 8通过使用“容器”注释来支持可重复注释: @Repeatable(FooContainer.class) @interface Foo { String value(); } @interface FooContainer { Foo[] value(); } @Foo(“bar”) @Foo(“baz”) public class SomeClass { } 我有一个库,我想支持Java 7(或更新版本)。 该库广泛使用注释,并且可以从支持可重复注释中获益。 根据我的理解,容器注释甚至可以在Java 7中工作,只有一个人必须使用它: @FooContainer({@Foo(“bar”),@Foo(“baz”)}) public class SomeClass { } 我最终会喜欢的是:如果我的库的用户使用Java 8,则用户将能够使用重复的注释。 如果用户使用Java 7,他必须坚持手动编写容器注释。 这样的事情有可能吗?

JavaFX冻结问题

我正在搞乱JavaFX API,由于某种原因,这个应用程序似乎在(看似)随机的时间后冻结。 它是一个应用程序,使红绿色渐变图案,并有一个很酷的动画与它一起使用。 运行应用程序时,按Enter键,动画将开始。 经过一段时间(看起来像我之前说的那样随机)它会停止更新,但是计时器继续运行,循环也是如此,并且仍然使用正确的参数调用setColor方法,这让我认为PixelWriter被冻结或窗口未更新。 我所做的代码如下: package me.dean; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.image.PixelWriter; import javafx.scene.input.KeyCode; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.stage.Stage; import java.util.Timer; import java.util.TimerTask; public class DeansApp extends Application { CoolAnimation canvas; @Override public void start(Stage primaryStage) throws Exception { canvas = new CoolAnimation(); canvas.setWidth(255); canvas.setHeight(255); primaryStage.setScene(new Scene(new Pane(canvas))); […]

如何在Java 8中找到N个数字中最大的M个数字?

IntStream可能是最简单的方法,但我只能选择最小的M数,如下所示: public class Test { private static final int[] arr = {5, 3, 4, 2, 9, 1, 7, 8, 6}; public static void main(String[] args) throws Exception { System.out.println(Arrays.asList(IntStream.of(arr).sorted().limit(5).boxed().toArray())); } } 顺便说一句,考虑到算法的复杂性并假设N >> M,“排序+限制”方法只有O(N log(N))的复杂度。 我认为最好的复杂性可能达到O(N log(M)),但我不知道Java 8是否有这种流方法或收集器。

在java8中重绘()和双缓冲,bug?

我一直在使用Java 8上的Swing中的动画,并且遇到了一些奇怪的行为:在某些其他不相关的组件上调用repaint()后,组件的内容有时会突然变得陈旧。 下面是代码,它为我重现了这种行为: import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseAdapter; public class Crosshair extends JPanel { private int currentMouseX = 0; private int currentMouseY = 0; public Crosshair() { addMouseMotionListener(new MouseAdapter() { @Override public void mouseMoved(MouseEvent e) { currentMouseX = e.getX(); currentMouseY = e.getY(); repaint(); } }); } @Override protected void paintComponent(Graphics g) { […]

如何在所有子构造函数中自动包含父方法的执行?

我有一个抽象类( Parent ),它有一个抽象方法( doSetup ),以及一个调用doSetup方法的成员方法。 我需要的是构造中的子类(实现Parent )应该自动调用doSetup方法,无论子类可能有多少构造函数。 是否有Java机制或设计模式可以帮助我解决这个问题? public abstract class Parent { abstract protected void sayHi(); protected void doSetup() { sayHi(); } } public class Child1 extends Parent { @Override protected void sayHi() { System.out.println(“hi”); } public Child1() { // Construction needs to automatically include exec of doSetup() } public Child1(String string) { // […]