小编Gar*_*son的帖子

内置的Java 8谓词总是返回true?

Google Guava有一个始终返回true的谓词.Java 8有类似的东西Predicate吗?我知道我可以使用(foo)->{return true;},但我想要预制的东西,类似于Collections.emptySet().

java lambda predicate java-8

116
推荐指数
3
解决办法
4万
查看次数

Apache Spark 3.3.0 在 Java 17 上中断并显示“无法访问类 sun.nio.ch.DirectBuffer”

在Running unit test with Spark 3.3.0 on Java 17 failed with IllegalAccessError: class StorageUtils cannot access class sun.nio.ch.DirectBuffer 中提出了类似的问题,但该问题(和解决方案)仅与单元测试有关。对我来说 Spark 正在破坏程序的实际运行。

根据Spark 概述,Spark 可与 Java 17 配合使用。我在 Windows 10 上使用 Temurin-17.0.4+8 (build 17.0.4+8),包括 Maven 中的 Spark 3.3.0,如下所示:

<scala.version>2.13</scala.version>
<spark.version>3.3.0</spark.version>
...
<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-core_${scala.version}</artifactId>
  <version>${spark.version}</version>
</dependency>

<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-sql_${scala.version}</artifactId>
  <version>${spark.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我尝试运行一个简单的程序:

final SparkSession spark = SparkSession.builder().appName("Foo Bar").master("local").getOrCreate();
final Dataset<Row> df = spark.read().format("csv").option("header", "false").load("/path/to/file.csv");
df.show(5);
Run Code Online (Sandbox Code Playgroud)

这到处都是:

Caused by: java.lang.IllegalAccessError: class org.apache.spark.storage.StorageUtils$ (in unnamed module @0x59d016c9) cannot access class …
Run Code Online (Sandbox Code Playgroud)

java apache-spark java-17

52
推荐指数
3
解决办法
4万
查看次数

清理Maven m2e .cache目录

我的Maven安装(Windows 7 64位)有一个.cache几乎3.5GB 的目录!它只包含一个m2e目录.(我正在使用m2e运行Eclipse 4.3M7.)目前内部所有内容都不需要,而且我甚至不知道这些东西是什么!我在.cache网上找不到目录的Maven文档.

那么.m2/repository/.cache.m2/repository/.cache/m2e目录是什么?他们为什么多年前有这么多东西?我如何处理不再需要的所有东西?

maven m2e

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

在Java 8流中按属性排序

哦,那些棘手的Java 8流与lambdas.它们非常强大,但错综复杂需要一点点围绕它的所有.

假设我有User一个属性类型User.getName().假设我有一个Map<String, User>与名称相关联的用户的地图(例如,登录用户名).让我们进一步说,我有一个比较器的实例UserNameComparator.INSTANCE来排序用户名(可能与花哨的合作者等).

那么如何获取地图中的用户列表,按用户名排序?我可以忽略地图键并执行此操作:

return userMap.values()
    .stream()
    .sorted((u1, u2) -> {
      return UserNameComparator.INSTANCE.compare(u1.getName(), u2.getName());
    })
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但是,我必须提取名称以使用的那一行UserNameComparator.INSTANCE似乎太多的手工工作.有什么方法我可以简单地提供User::getName一些映射函数,只是为了排序,并仍然将User实例返回到收集列表中?

额外奖励:如果我想要排序的东西是两个层次,如User.getProfile().getUsername()

java sorting lambda java-8 java-stream

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

让IntelliJ IDEA刷新项目并检测更改的文件

我正在使用Eclipse进行开发,因为IntelliJ无法做的所有事情(例如突出显示变量的所有实例),并且因为IntelliJ在远程连接上比较慢.但是因为我还没有将Maven完全集成到Eclipse中,所以我必须切换回IntelliJ来使用Tomcat编译和运行我的项目.

如何告诉IntelliJ检测文件系统上已更改的所有文件并重新编译它们?(我不想手动打开每个更改的文件以使IntelliJ检测到更改.)在Eclipse中我只刷新项目树[ 1 ] ...

脚注:

  1. Eclipse具有一个功能(名为" 使用本机挂钩或轮询刷新 "),您可以在文件系统中检测到任何基础更改时自动检测更改并同步透视图(参见下图).这非常方便,并且在使用构建工具时无需手动刷新项目 - 在项目目录结构中创建文件/目录.

是否有任何类似的Intellij(显式设置或其他),消除了必须单击按钮以同步视图与文件系统更改?

'刷新使用本机挂钩或轮询'设置

eclipse refresh file intellij-idea

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

如何处理Mockito的"任何其他价值"?

我有一个Foo方法接口int Foo.bar(int),我想用Mockito模拟.99如果我传入,我希望模拟的方法返回1,但所有其他值将抛出异常.我可以这样做吗?

final Foo foo = mock(Foo.class);
when(foo.bar(1)).thenReturn(99);
when(foo.bar(anyInt())).thenThrow(new IllegalArgumentException());
Run Code Online (Sandbox Code Playgroud)

换句话说,1优先考虑anyInt()?我不希望它抛出异常1.该文档说,对于多个定义,最后的定义是比较重要的,但我不能告诉这是否意味着对于相同的参数或没有.如果它适用于此,我是否需要先定义通配符anyInt()?或者两者甚至有任何关系,因为其中一个是匹配器而另一个只是一个值?

java mockito

23
推荐指数
1
解决办法
7364
查看次数

Eclipse 2018-09在Windows 10上使用OpenJDK 11

我刚刚在Windows 10上安装了OpenJDK版本的JDK 11通用可用性版本.我尝试在刚刚发布的Eclipse 2018-09(4.9.0)中将其作为JRE安装,并在Eclipse对话框中显示一条消息:

您选择了此版本的Eclipse JDT尚未完全支持的JRE.某些功能可能无法正常工作.

问题是什么?

  • Eclipse 2018-09不完全支持JDK 11吗?
  • 或者是Eclipse不完全支持OpenJDK 11但是支持Oracle JDK 11?
  • 特别是"功能"可以指望"不按预期工作"?

更新:从Internet搜索,我发现一些代码似乎表明Eclipse有一个已知Java版本的内部列表,如果新的JDK版本的版本高于已知的Java版本,它会给出上述消息.(这就是我解释代码的方式.)真的吗?Eclipse发布了一个新的2018-09版本,就在JDK 11发布前几天,没有更新其已知Java版本列表以包含Java 11?

也许有人有更权威的答案.

java eclipse java-11 eclipse-2018-09

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

Java识别出一些文件和目录但仍然认为它们不存在

我在采用 NTFS 的 Windows 10 上使用 Java 17。有一个文件A:\\foo.bar显示在 JavaFiles.list()操作中,但是当我尝试使用 Java 读取它时,它会抛出一个java.nio.file.FileSystemException

\n
\n

A:\\foo.bar: 该进程无法访问该文件,因为该文件正在被另一个进程使用

\n
\n

没关系。还有另一个低级进程已锁定该文件。当我关闭其他进程时,Java 可以正常访问该文件。事实上,即使 Robocopy 在尝试访问该文件时也会跳过该文件(实际上 Robocopy 会显示已复制该文件,但实际上并未复制)。所以到目前为止,这并不神秘\xe2\x80\x94另一个进程正在锁定该文件以进行独占访问。

\n

但这是奇怪的部分。大多数情况下,该文件对于 Java 来说是正常的:

\n
    \n
  • 正如我提到的,该文件A:\\foo.bar显示Files.list()A:\\.
  • \n
  • 如果我调用Files.isRegularFile(fooBarFile),它会true按预期返回。
  • \n
  • 如果我调用Files.isReadable(fooBarFile),它会false按照我的预期进行转换(这在本例中很有用)。
  • \n
  • 如果我打电话,Files.readAttributes(fooBarFile, "*")我会看到属性(时间戳等)。
  • \n
  • 如果我调用Files.readAttributes(fooBarFile, DosFileAttributes.class)它会返回 DOS 属性。
  • \n
\n

但如果我调用Files.exists(fooBarFile)它就会返回false因此,被另一个进程锁定为独占访问的文件将返回falsefor exists(),在我看来,这似乎不遵循exists()其 …

java file

19
推荐指数
1
解决办法
763
查看次数

Android DownloadManager和SSL(https)

哦,太好了.总有一些东西...... Grrr ......

无论如何,所以我花了几天时间跋涉模糊,不完整和矛盾的Picasa信息,以便我的Android应用程序可以找到Picasa图片并使用下载管理器下载它.所以刚才我做了最后的润色并点击了"运行"按钮.一切顺利,直到DownloadManager尝试下载文件:

java.lang.IllegalArgumentException: Can only download HTTP URIs: https://example.com/image.jpg
Run Code Online (Sandbox Code Playgroud)

告诉我你在开玩笑.告诉我他们没有制作无法处理SSL的下载管理器......

更好的是,告诉我如何在Android下载管理器中启用SSL访问.

ssl https android download-manager

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

在ISO 8601中识别时区

不,我不是在谈论区域偏移 - 这些区域在一年中可能因基于例如夏令时的区域而变化.我在谈论IANA维护的实际时区.我理解ISO 8601 支持这些,对吗?

什么平台在支持ISO 8601类似字符串表示中识别时区?我注意到最新的Java日期/时间库正在使用扩展的ISO 8601格式,例如2011-12-03T10:15:30+01:00[Europe/Paris].(请参阅DateTimeFormatter API.)

是否有一些融合约定(例如与其他语言和平台一起)用于扩展ISO 8601以支持时区指定?

java timezone iso8601 timezone-offset

18
推荐指数
2
解决办法
9863
查看次数