小编Nam*_*man的帖子

Java 9中是否可以使用循环模块依赖?

在Java 9中,是否允许使用循环模块?如果不是,原因是什么?

module com.foo.bar {
    requires com.foo.baz;
    exports com.foo.bar.fizz;
}

module com.foo.baz {
    requires com.foo.bar;
    exports com.foo.baz.buzz;
}
Run Code Online (Sandbox Code Playgroud)

java java-platform-module-system java-9 java-module module-info

17
推荐指数
1
解决办法
1025
查看次数

在自动化方面做了很多努力后,无法找到Android本机应用程序的验证

我正在进行Android原生应用程序的自动化,并希望通过文本验证登录验证.当我尝试使用Appium检查器和Uiautomator选择它时.两者都无法找到验证部分,因此很难选择它.

在此输入图像描述

我尝试了来自不同论坛和Appium讨论的代码,但仍然无法通过自动化找到验证.我尝试过以下方法:

代码1

JavascriptExecutor js = (JavascriptExecutor)driver;

WebElement field = driver.findElement(By.xpath("//android.widget.EditText[@text='Enter mobile number']"));
// Boolean is_valid = (Boolean)js.executeScript("return arguments[0].checkValidity();", field);

try {
    String message = (String) js.executeScript("return arguments[0].validationMessage;", field);
} catch (Exception E) {
Run Code Online (Sandbox Code Playgroud)

输出:

例外:org.openqa.selenium.WebDriverException:方法尚未实现

代码2

public boolean IsValidationFired() {
    if(driver.getPageSource().contains("Invalid")) {
        System.out.println("PASS");
    } else {
        System.out.println("FAIL");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

打印=失败

我不确定它是javascript弹出窗口还是本机应用程序弹出窗口或Toast message.But要检查它并通过自动化验证.

更新

用于启动验证的代码是: contactnu.setError("Invalid phone number.");

java validation android selenium-webdriver appium

17
推荐指数
1
解决办法
638
查看次数

什么更有效:排序流或排序列表?

假设我们在集合中有一些项目,我们想要使用某个比较器对它们进行排序,期望列表中的结果:

Collection<Item> items = ...;
Comparator<Item> itemComparator = ...;
Run Code Online (Sandbox Code Playgroud)

其中一种方法是对列表中的项进行排序,例如:

List<Item> sortedItems = new ArrayList<>(items);
Collections.sort(sortedItems, itemComparator);
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用排序流:

List<Item> sortedItems = items
    .stream()
    .sorted(itemComparator)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我想知道,哪种方法更有效率?排序流是否有任何优点(如多核上的紧固排序)?

从运行时复杂性/速度的角度来看,效率很高.

我不相信自己能够实现一个完美的基准,学习SortedOps并没有真正启发我.

java arraylist java-8 java-stream

17
推荐指数
2
解决办法
3503
查看次数

Java 14 或 15 中的字符串插值

因为我使用的是 Java 14 和 15 预览功能。试图在java中找到字符串插值。

我找到的最接近的答案是

String.format("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4)

由于我从很多参考资料中得到的答案是 4,5 年前提出的旧答案。java 11,12,13,14,15 中的字符串插值是否有任何更新,相当于 C#

string name = "Horace";
int age = 34;
Console.WriteLine($"Your name is {name} and your age {age}");
Run Code Online (Sandbox Code Playgroud)

java string java-15

17
推荐指数
2
解决办法
7364
查看次数

如何使用Jsoup从相对HTML链接中提取绝对URL?

我正在使用Jsoup来提取网页的URL.在href这些URL的属性是相对的,如:

<a href="/text">example</a>
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

Document document = Jsoup.connect(url).get();
Elements results = document.select("div.results");
Elements dls = results.select("dl");
for (Element dl : dls) {
    String url = dl.select("a").attr("href");
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果我使用

String url = dl.select("a").attr("abs:href");
Run Code Online (Sandbox Code Playgroud)

获得绝对URL http://example.com/text,它不起作用.我如何获得绝对URL?

java url jsoup

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

使用Java 8流方法获取最后的最大值

给定一个具有属性的项目列表,我试图让最后一个项目显示所述属性的最大值.

例如,对于以下对象列表:

t  i
A: 3
D: 7 *
F: 4
C: 5
X: 7 *
M: 6
Run Code Online (Sandbox Code Playgroud)

我可以得到最高的东西之一i:

Thing t = items.stream()
        .max(Comparator.comparingLong(Thing::getI))
        .orElse(null);
Run Code Online (Sandbox Code Playgroud)

但是,这会得到我Thing t = D.是否有一种干净而优雅的方式来获取最后一项,即X在这种情况下?

一种可能的解决方案是使用该reduce功能.但是,该属性是动态计算的,它看起来更像是:

Thing t = items.stream()
        .reduce((left, right) -> {
            long leftValue = valueFunction.apply(left);
            long rightValue = valueFunction.apply(right);
            return leftValue > rightValue ? left : right;
        })
        .orElse(null);
Run Code Online (Sandbox Code Playgroud)

valueFunction现在需要将近一倍,而调用.

其他明显的迂回解决方案是:

  1. 将对象存储在带有索引的元组中
  2. 将对象存储在具有计算值的元组中
  3. 事先颠倒列表
  4. 不要使用Streams

java java-8 java-stream

16
推荐指数
2
解决办法
1213
查看次数

如何取消加载网站的webview?

我想要实现的实际上是浏览器的取消按钮,但使用JavaFX的webview.这是我到目前为止的代码:

Worker<Void> loadWorker = webView.getEngine().getLoadWorker();
if (loadWorker != null) {
    Platform.runLater(() -> loadWorker.cancel());
}
Run Code Online (Sandbox Code Playgroud)

但它有时会起作用,有时却不起作用.

取消加载页面的webview/webengine任务的正确方法是什么?

java javafx webview javafx-webengine

15
推荐指数
1
解决办法
697
查看次数

stream.spliterator()是否关闭了流?

是否stream.spliterator()隐式关闭stream,或者之后是否需要明确关闭它?

Stream<String> stream = Stream.of("a", "b", "c");
Spliterator<T> spliterator = stream.spliterator();
// Some low lever operation with the spliterator
stream.close(); // do we need to close?
Run Code Online (Sandbox Code Playgroud)

乍一看,似乎该.spliterator()方法关闭了stream,但没有调用stream.close().至少如果我在.spliterator()调用方法后立即将其关闭,似乎不会影响分裂器操作.

Stream<String> stream = Stream.of("a", "b", "c").limit(2);
Spliterator<T> spliterator = stream.spliterator();
stream.close();
// Some low lever operation with the spliterator
Run Code Online (Sandbox Code Playgroud)

这个问题可以扩展到其他stream方法,例如,.findAny().

stream.findAny() // Can I assume that I don't need to close the stream?
stream.onClose(() -> System.out.println("hi!")).findAny()`
// …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream spliterator

15
推荐指数
2
解决办法
758
查看次数

如何将参数传递给jshell脚本?

我愿意将参数传递给jshell脚本.例如,我会喜欢这样的事情:

jshell myscript.jsh "some text"
Run Code Online (Sandbox Code Playgroud)

然后在脚本中的某个变量中提供字符串"some text".

但是,jshell只需要一个文件列表,因此答案是:

File 'some text' for 'jshell' is not found.
Run Code Online (Sandbox Code Playgroud)

有没有办法将参数正确传递给jshell脚本?

迄今为止的解决方法

到目前为止,我唯一的解决方案是在调用脚本时使用环境变量:

ARG="some test" jshell myscript.jsh
Run Code Online (Sandbox Code Playgroud)

然后我可以在脚本中访问它:

System.getenv().get("ARG")
Run Code Online (Sandbox Code Playgroud)

java-9 jshell

15
推荐指数
1
解决办法
956
查看次数

Java 9:Eclipse中无法访问模块java.xml.bind

我将Java 8中的maven项目迁移到Java 9项目而没有任何构建工具Eclipse OxyGen 1a.

所以我的module-info.java看起来像这样:

在此输入图像描述

但java.xml.bind不可访问,虽然它在我的模块路径中:

在此输入图像描述

那么这里有什么问题?

java eclipse java-9 java-module

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