标签: java-8

如何在当前primaryStage上设置警报框位置?(JavaFX)

编辑:如果用户单击“删除”以删除 ListView 中的项目,我会弹出一个警告框。它有效,但我希望它弹出原始阶段。它出现在我的第一台显示器上。有没有办法在显示时设置警报的位置?

请注意,“所有者”在不同的类中,我使用 Scenebuilder/FXML 创建了所有内容。我不知道如何让 initOwner() 工作。这是“主要”类:

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Assignment_5 extends Application {
    public Stage primaryStage;

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("Assignment_5.fxml"));
    primaryStage.setTitle("Plant Pack");
    primaryStage.setScene(new Scene(root, 1200, 500));
    primaryStage.show();
}

public static void main(String[] args) {
    launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)

这是 Controller 类中的工作代码。没有必要实现此警报的模式,但它会是一个很好的补充,使其更方便。我只是不知道如何将主 Window 从 Main 类传递给这个:

    protected void handleDeleteButtonClick(ActionEvent event) {
    Alert alertBox = new Alert(Alert.AlertType.CONFIRMATION, "Confirm Delete", ButtonType.OK, ButtonType.CANCEL);
    alertBox.setContentText("Are you sure you …
Run Code Online (Sandbox Code Playgroud)

alert javafx java-8

2
推荐指数
1
解决办法
7627
查看次数

如何检查 Date 对象或 Calendar 对象是否为有效日期(真实日期)?

SimpleDateFormat 类的方法:

public void setLenient(boolean lenient)
Run Code Online (Sandbox Code Playgroud)

指定日期/时间解析是否宽松。通过宽松解析,解析器可以使用试探法来解释与此对象格式不精确匹配的输入。使用严格解析,输入必须与此对象的格式匹配。

Calendar类的方法:

public void setLenient(boolean lenient)
Run Code Online (Sandbox Code Playgroud)

指定日期/时间解释是否宽松。对于宽松解释,诸如“February 942, 1996”之类的日期将被视为等同于 1996 年 2 月 1 日之后的第 941 天。对于严格(非宽松)解释,此类日期将导致抛出异常。默认是宽松的。

检查格式的一致性或滚动日期。

我想确认MM-DD-YYYY(02-31-2016)的日期是否应该返回无效,因为 2 月的 31 天不是一个真实的日期,所以 04-31-1980 也应该返回无效。

不想使用 Java 8 中的 Joda 时间 API,但是对此的任何建议将不胜感激。

java datetime date java-8 java-time

2
推荐指数
1
解决办法
2195
查看次数

是否可以在使用 java 8 流的收集阶段过滤/忽略对象?

这个问题与我不久前发布的另一个问题有关。

我已经找到了一种按照我想要的方式对数据进行分组的方法。但是因为我需要对对象进行分组/映射,所以当我需要应用一些过滤时,我已经在收集期间关闭了流。我有以下代码:

final Map<TeamDetails, List<Player>> teamDetailsPlayerListMap  = 
        dbRows.stream().map(row -> mapDbRowToTeamPlayerPair(row))
                .collect(Collectors.groupingBy(TeamPlayerPair::getKey, 
                      Collectors.mapping(TeamPlayerPair::getValue, Collectors.toList())));

final List<Team> teams = teamDetailsPlayerListMap.entrySet().stream()
        .map(teamPlayerList -> mapTeamPlayerListToTeam(teamPlayerList))
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是某些 dbRowsStringplayerName. 我不想在收集之前过滤,就好像 aTeam没有播放器一样(例如,只有 1 db 行,播放器名称为空字符串),我仍然希望Team在最后的s列表中包含它。它只会有一个空的玩家列表。

有什么方法可以在收集过程中应用过滤器,以便不会将空字符串或空字符串添加到列表中???

我已经能够使用自定义收集器实现它,如下所示,但我只是想知道是否有办法在没有自定义收集器的情况下做到这一点???

Function<Player, Boolean> emptyPlayerNameFilter = new Function<Player, Boolean>() {
    @Override
    public Boolean apply(Player player) {
         return player != null && player.getName() != null && !"".equals(player.getName());
    }
};

final Map<TeamDetails, List<Player>> teamDetailsPlayerListMap  = 
        dbRows.stream().map(row -> mapDbRowToTeamPlayerPair(row))
        .collect(Collectors.groupingBy(TeamPlayerPair::getKey, 
                Collectors.mapping(TeamPlayerPair::getValue, 
                        MyCollectors.toFilteredLinkedList(emptyPlayerNameFilter))));

final List<Team> …
Run Code Online (Sandbox Code Playgroud)

java-8 java-stream collectors

2
推荐指数
1
解决办法
2012
查看次数

了解 Optionals.orElse

我正在尝试学习Java 8 功能 Optional。我对 Optional.orElse 的工作方式感到困惑。这是我尝试过的:

public class OptionalsExample {

    public static void main(String[] args) {
        Name userName = new Name();
        userName.setName("John Doe");
        Optional<Name> optionalName = Optional.ofNullable(userName);
        optionalName.ifPresent(
                (Name value) -> {
                    Optional<String> optionalNameString = Optional.ofNullable(value.getName());
                    optionalNameString.ifPresent(name -> System.err.println("Name is: " + optionalNameString.get()));
                }
        );
    }
    private static void printError() {
        System.err.println("No Name present");
    }
}
Run Code Online (Sandbox Code Playgroud)

我担心的是,如果设置了 name 一切正常,但是当没有设置 name 时,我想执行orElse。我想在评论时做点什么

userName.setName("John Doe");
Run Code Online (Sandbox Code Playgroud)

喜欢打印 No Name Found

我怎样才能做到这一点?

TIA

java null optional notnull java-8

2
推荐指数
1
解决办法
1万
查看次数

无法使用 Java 1.8 在 JBoss 5.1 中编译 JSP 文件

无法使用 Java 1.8 在 JBoss 5.1 中编译 JSP 文件。能够编译常规 Java 文件,甚至可以完成没有 JSP 的 Spring 项目。

如果我们为那些 JSP 文件保留编译好的类文件,它就可以正常工作。

以下是我在尝试运行 JSP 文件时遇到的错误:

2016-07-15 14:56:00,758 ERROR [org.apache.jasper.compiler.Compiler] (http-0.0.0.0-80-31) Compilation error
org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
        at org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:369)
        at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:206)
        at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:163)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:97)
        at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:49)
        at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:101)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:169)
        at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2241)
        at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:974)
        at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1184)
        at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:535)
        at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:743)
        at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:444)
        at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:429)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:335)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:313)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:300)
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:585)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:312)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at …
Run Code Online (Sandbox Code Playgroud)

java jsp jboss5.x java-8

2
推荐指数
1
解决办法
5634
查看次数

使用 DateTimeFormatter "hh:mm a" 解析时间导致异常

我已经在线检查了许多解决方案,但在解析“hh:mm a”时仍然出现异常。

在 JSP 中:

$('#t2').timepicker({
                        timeFormat : 'hh:mm a',
                        interval : 30,
                        maxTime : '11:00 pm',
                        startTime : '08:00 am',
                        dynamic : false,
                        dropdown : true,
                        scrollbar : true
                    });

...

                                    <div class="form-group">
                                        <label
                                            class="col-md-3 control-label">Start
                                            Time</label>
                                        <div class="col-md-7">
                                            <input type="text"
                                                class="timepicker"
                                                id="t1"
                                                name="startTime"
                                                readonly="readonly">
                                        </div>
                                    </div>
Run Code Online (Sandbox Code Playgroud)

在 Java 中:

String startTime = request.getParameter("startTime");
DateTimeFormatter formatterTime1 = DateTimeFormatter.ofPattern("hh:mm a", Locale.US);
LocalDateTime localStartTime = LocalDateTime.parse(startTime, formatterTime1);
Run Code Online (Sandbox Code Playgroud)

例外:

java.time.format.DateTimeParseException: Text '08:00 am' could not be parsed at index 6
Run Code Online (Sandbox Code Playgroud)

即使我尝试硬编码:

String …
Run Code Online (Sandbox Code Playgroud)

java datetime datetime-format datetime-parsing java-8

2
推荐指数
1
解决办法
2541
查看次数

流:避免 NullPointerException

我必须获取数组的第一个元素。但该元素可能为空;如果元素为空,我将放置一个空字段(我正在尝试生成一个 pdf)

这是我现在的代码:

public void makePdf(Long id) throws IOException {
    Candidacy ca = candidacyRepository.findOne(id); 
    cos.beginText();

    cos.showText(
       ca.getInterviews().stream().map(Interview::getAgency).map(Agency::getAgencyName).collect( Collectors.toList()).get(0)!=null?ca.getInterviews().stream().map(Interview::getAgency).map(Agency::getAgencyName).collect( Collectors.toList()).get(0):"")); 

    cos.endText();
}
Run Code Online (Sandbox Code Playgroud)

所以我不想阻止pdf的生成。非常感谢您的支持!

更新

抱歉不够精确:我也按日期排序。

public void makePdf(Long id) throws IOException {
        Candidacy ca = candidacyRepository.findOne(id); 
        cos.beginText();

        cos.showText(
           ca.getInterviews().stream().sorted((a,b)-> a.getInterviewDate().compareTo(b.getInterviewDate())).sorted((a,f)->f.getInterviewDate().compareTo(a.getInterviewDate())).sorted((b,f)->b.getInterviewDate().compareTo(f.getInterviewDate())).map(Interview::getAgency).map(Agency::getAgencyName).collect( Collectors.toList()).get(0)!=null?ca.getInterviews().stream().sorted((a,b)-> a.getInterviewDate().compareTo(b.getInterviewDate())).sorted((a,f)->f.getInterviewDate().compareTo(a.getInterviewDate())).sorted((b,f)->b.getInterviewDate().compareTo(f.getInterviewDate())).map(Interview::getAgency).map(Agency::getAgencyName).collect( Collectors.toList()).get(0):"")); 

        cos.endText();
    }
Run Code Online (Sandbox Code Playgroud)

我收到一个 NullPointerException:/ 谢谢你的帮助

java java-8

2
推荐指数
1
解决办法
2万
查看次数

JavaFX 如何在 GridPane 中的 HBox 中垂直对齐 CheckBox

首先,生成说明问题的 UI 的代码:

package test;

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class Main extends Application {

    public static void main(final String[] args) throws Exception {
        launch(args);
    }

    @Override
    public void start(final Stage window) throws Exception {
        // Create a VBox to hold the table and button
        final GridPane root = new GridPane();
        root.setHgap(5);
        root.setVgap(5);

        // Add a combo-box to the first row
        final ComboBox<String> dropdown1 = new …
Run Code Online (Sandbox Code Playgroud)

java javafx java-8 javafx-8

2
推荐指数
1
解决办法
4870
查看次数

遍历嵌套集合以找到匹配条件的第一个子子子元素

我有一个带有其他对象列表的对象,每个其他对象都有一个列表等。我需要在层次结构中找到层次结构中具有匹配某个值的属性的第一个(也是唯一的)最后一个元素。看到我现在的代码会更清楚:

    @Override
public Poste findByNumeroAndMillesime(String numero, Millesime millesime) {
    return millesime
            .getDivisions()
            .stream()
            .filter(
                    division -> division
                    .getGroupes()
                    .stream()
                    .filter(
                          groupe -> groupe
                          .getClasses()
                          .stream()
                          .filter(
                                  classe -> classe
                                  .getSousClasses()
                                  .stream()
                                  .filter(
                                          sousClasse -> sousClasse
                                          .getPostes()
                                          .stream()
                                          .filter(poste -> numero.equals(poste.getNumero()))
                                          .findFirst()
                                          .get()
                                          ))));

}
Run Code Online (Sandbox Code Playgroud)

我需要返回与作为参数传递的数字相同的 Poste。

提前致谢。

foreach java-8 java-stream

2
推荐指数
1
解决办法
778
查看次数

在java中并行读取/处理结果集

我有这个要求迭代结果集中返回的数百万条记录并处理它们并将它们存储在某些数据结构中。我找不到任何相关的例子或参考。JOOQ 似乎在做一些我可能想要的事情,但它似乎不是免费的。我希望如果使用 java 8 流我可能能够实现它,但不是 example 或 writeup 似乎给了我任何前进的方向。我也对其他选择持开放态度。
基于这个 SO 参考:resultset parallel我在下面尝试过,但它没有给我任何性能改进,如下面的性能指标所示。
代码:顺序迭代:

while(rs.next()) {
    System.out.println(rs.getString(1));
    }
Run Code Online (Sandbox Code Playgroud)

使用流和拆分器:

Stream<String> s = StreamSupport.stream(new Spliterators.AbstractSpliterator<String>(Long.MAX_VALUE,
                Spliterator.ORDERED) {

            @Override
            public boolean tryAdvance(Consumer<? super String> action) {
                try {
                    if (!rs.next())
                        return false;
                    action.accept(rs.getString(1));
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return true;
            }
        }, true);
        s.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

记录总数:3759
Sequential 花费的时间:~83.8 secs
Streams 花费的时间:~83.5 secs

任何人都可以查看并告诉我我是否没有正确实现流。

java jdbc resultset java-8 java-stream

2
推荐指数
1
解决办法
4580
查看次数