在Java中,如何高效优雅地传输树节点的后代?

假设我们有一组由唯一String标识的对象,以及一个定义它们层次结构的类Tree 。 该类使用从节点(由其ID表示)到其各自子节点ID的Collection的Map来实现。 class Tree { private Map<String, Collection> edges; // … public Stream descendants(String node) { // To be defined. } } 我想启用流式节点的后代。 一个简单的解决方案是: private Stream children(String node) { return edges.getOrDefault(node, Collections.emptyList()).stream(); } public Stream descendants(String node) { return Stream.concat( Stream.of(node), children(node).flatMap(this::descendants) ); } 在继续之前,我想对此解决方案做出以下断言。 (我对这些是正确的吗?) 从descendants返回的Stream消耗资源(时间和内存) – 相对于树的大小 – 与复制的手动编码的复杂程度相同。 特别是,表示迭代状态的中间对象( Stream s, […]

比较Java中的日期字符串

所以我使用dateString1.compareTo(dateString2) ,它根据每个字符的Unicode值对字符串进行字典比较,并返回一个int。 这是一个代码示例。 String dateString1 = “05-12-2012”; String dateString2 = “05-13-2012”; if (dateString1.compareTo(dateString2) <=0){ System.out.println("dateString1 is an earlier date than dateString2"); } 这是比较Java中日期的错误方法吗? 在我的测试中,我没有遇到过我意外结果的情况。 我真的不想从字符串中创建一个Date对象,如果我不需要,因为我在一个长时间运行的循环中这样做。 Ninja编辑从下面的答案中收集如果将日期作为字符串进行比较,如果它是yyyyMMdd格式,但是如果它是任何其他格式,则显然会导致错误。 我实际上在我的实际代码中将日期字符串作为yyyyMMdd格式。 (我在上面给出的示例中键入了错误的格式。)所以现在,我将保留代码,并添加几行注释以certificate我的决定。 但我现在看到比较像这样的字符串是非常有限的,如果dba决定改变日期格式,我将遇到错误,我不认为发生了。

如何在Java 6中使用TLS 1.2

看来Java 6支持高达v1.0的TLS,有没有办法在Java 6中使用TLS 1.2? 也许Java 6的补丁或特定更新会支持它?

finally块总是在Java中执行吗?

考虑到这段代码,我可以绝对确定 finally块总是执行,无论是什么something() ? try { something(); return success; } catch (Exception e) { return failure; } finally { System.out.println(“i don’t know if this will get printed out.”); }

覆盖Object.equals VS重载它

阅读:有效的Java – Joshua Bloch的第二版 第8项 – 在覆盖等于国家时遵守一般合同: 程序员编写一个看起来像这样的equals方法,然后花费数小时来解释为什么它不能正常工作的情况并不少见: [此处代码示例] 问题是此方法不会覆盖Object.equals,其参数类型为Object,但会重载它。 代码示例: public boolean equals(MyClass o) { //… } 我的问题: 为什么强类型的equals方法像这个代码示例中的那样重载不够? 该书指出,重载而不是覆盖是不好的,但它没有说明为什么会出现这种情况或者什么情况会使这种等于方法失败。

如何使用arraylist作为预处理语句参数

我已经看过并且无法找到我正在接受的以下挑战的答案。 这似乎很简单但我无法解决它。 我有一个类型为Long的记录ID的ArrayList – > ArrayList 。 我想使用此记录ID列表从另一个表中选择行。 到现在为止还挺好。 现在迎接挑战…… a)我使用预准备语句从表中选择数据,使用ArrayList作为输入。 selectPS = dbConnection.prepareStatement(“select columnA from tableA where id in ?”); 关于上述问题 – 如何定义参数? 以上对于ArrayList类型参数似乎不正确。 b)在为预准备语句设置参数值时,我也遇到了问题。 没有设置ArrayList类型值的方法,我看不到其他可行的选项。 —> selectPS.set?????(1, arraylistParameter); ResultSet rs = selectPS.executeQuery(); 我们非常感谢您为我提供的任何帮助或指导。 谢谢。

从列表中随机选择一个项目

如何从Java中的列表中随机选择项? 我有 List list = new ArrayList(); list.add(“One”); list.add(“Two”); 等等….我怎样才能从这个列表中随机选择 Random myRandomizer = new Random();

使用JavaFX 2.0编译代码(使用命令行)

我想知道如何使用JavaFX从Windows shell编译代码。 我在fxservidor.java有这个代码: public class Fxservidor extends Application { /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle(“Hello World!”); Button btn = new Button(); btn.setText(“Say ‘Hello World'”); btn.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { Synthetizer os = new […]

Java获取我的IP地址

我想用Java获取我的Internet IP地址,但是当我的IP地址是192.168.0.xxx时,我一直得到我的本地地址(即:127.0.0.1) 我正在使用这条线: InetAddress.getLocalHost().getHostAddress(); 这似乎是获取IP地址的标准,但它不是我想要的。 每个教程都说使用这一行,所以我有点困惑。 谁能告诉我如何才能得到正确的IP地址? 我正在运行连接到WiFi的设备,而我没有使用任何电缆。 我使用ifconfig inet addr给出的IP连接到服务器,我希望得到设备的inet addr。 我可以检查服务器端套接字的IP,但是如果设备(客户端)告诉服务器他希望其他设备连接哪个IP,那就更好了。

加载FXML文件时“需要位置”exception

我正在尝试加载FXML文件并将其显示为应用程序窗口,但我得到一个例外。 FXML文件由FXML场景生成器创建。 以下是该课程的代码 public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { primaryStage.setScene(FXMLLoader.load(getClass().getResource(“sample.fxml”))); primaryStage.show(); } } 和FXML文件 这是我得到的例外 Exception in Application start method Exception in thread “main” java.lang.RuntimeException: Exception in Application start method at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:875) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(LauncherImpl.java:157) at com.sun.javafx.application.LauncherImpl$$Lambda$1/2074407503.run(Unknown Source) at java.lang.Thread.run(Thread.java:745) […]