我有一个List<Map<String, String>>。我想将其转换为单个地图。
列表大小可以是 1..n。不确定如何使用 Java 8 Stream 来做到这一点?
List<Map<String, String>> mapList = new ArrayList<>();
Map<String, String> map1 = new HashMap<>();
map1.put("1", "One");
map1.put("2", "Two");
Map<String, String> map2 = new HashMap<>();
map2.put("3", "Three");
map2.put("4", "Four");
mapList.add(map1);
mapList.add(map2);
Map<String, String> finalMap = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
我们可以在 Java 7 中做这样的事情:
for(Map<String, String> map : mapList) {
for(String key : map.keySet()) {
finalMap.put(key, map.get(key));
}
}
System.out.println("Final Map " + finalMap); // Final Map {1=One, 2=Two, 3=Three, 4=Four}
Run Code Online (Sandbox Code Playgroud) 据推测,我正在为依赖specs于Scala. 测试更多地绑定到具有某些timestamp属性的事件流。
以下存根是实际实现的部分
private def eligibleForRecentPost(optionalPost: Option[SearchEntity]): Boolean = {
optionalSearch.map(search => search.timestamp)
.exists(searchTime => searchTime >= LocalDateTime.now()
.minusDays(recencyDurationInDays).atZone(ZoneId.systemDefault).toInstant.toEpochMilli)
}
Run Code Online (Sandbox Code Playgroud)
现在,我要查找的代码可能类似于
// just a mock
when(LocalDateTime.now().minusDays(any)
.atZone(ZoneId.systemDefault).toInstant.toEpochMilli)
.thenReturn(1579625874972)
Run Code Online (Sandbox Code Playgroud)
请注意,我知道测试中的 search.timestamp 可以更新,但这需要在每次recencyDurationInDays!!
但是在specs2和/或scala中是否有更好更可靠的方法来做到这一点?
编辑:我必须提到,我不期待更改实现以致LocalDateTime被另一个类覆盖/包装。
我正在使用Java 11新的 Z 垃圾收集器 (ZGC) 似乎很有前途。
文档说它使用了一些低延迟垃圾收集机制,这样GC暂停时间永远不会超过10 ms,非常好地处理大堆,并允许将未使用的堆内存返回给操作系统,而旧的 GC 不存在
我担心的是 - ZGC 的稳定性如何,如果在生产中继续推进,是否存在风险?
谢谢!
我的系统上安装了 pom 和 jdk 11 中的 aspectj-maven-plugin:1.11。Jdk 11 在 lib 目录中没有 tools.jar。这导致 maven 构建失败并出现错误:
[错误] 无法执行目标 org.codehaus.mojo:aspectj-maven-plugin:1.11:compile (default) on project groundtruth-storage-writer: 目标 org.codehaus.mojo 的执行默认:aspectj-maven-plugin:1.11 :compile failed: Plugin org.codehaus.mojo:aspectj-maven-plugin:1.11 或其依赖项之一无法解析:在指定路径找不到工件 com.sun:tools:jar:11.0.7 ...\ Java\jdk-11.0.7/../lib/tools.jar
如何解决这个问题?
有一个答案在这里,但超过2岁。
mvn javaf:jlink当应用程序运行时,我无法从我使用 JLink 工具 ( )创建的应用程序映像中读取外部文件。外部文件放置在资源文件夹中。这是我得到的错误:
ERROR ExecutorOfFiles Script failed to read or load: SampleScript.jsh
java.nio.file.NoSuchFileException: /com.luisosv/com/luisosv/SampleScript.jsh
at java.base/jdk.internal.jrtfs.JrtFileSystem.checkNode(JrtFileSystem.java:494)
at java.base/jdk.internal.jrtfs.JrtFileSystem.getFileContent(JrtFileSystem.java:253)
at java.base/jdk.internal.jrtfs.JrtFileSystem.newByteChannel(JrtFileSystem.java:351)
at java.base/jdk.internal.jrtfs.JrtPath.newByteChannel(JrtPath.java:696)
at java.base/jdk.internal.jrtfs.JrtFileSystemProvider.newByteChannel(JrtFileSystemProvider.java:302)
at java.base/java.nio.file.Files.newByteChannel(Files.java:370)
at java.base/java.nio.file.Files.newByteChannel(Files.java:421)
at java.base/java.nio.file.Files.readAllBytes(Files.java:3205)
at com.luisosv@1.0-SNAPSHOT/com.luisosv.ExecutorOfFiles.loadSnippetsFromFile(ExecutorOfFiles.java:55)
Run Code Online (Sandbox Code Playgroud)
我正在使用以下内容来读取外部文件:
String sourceCode = new String(Files.readAllBytes(
Paths.get(
this.getClass().getResource(scriptFileName).toURI())));
Run Code Online (Sandbox Code Playgroud)
但是,从命令行使用该应用程序可以正常工作mvn javafx:run。
我读过应用程序映像一旦创建,就无法更新或修补。对于任何更改,都需要从https://www.studytrails.com/java/java-9/java-9-jlink/部署新的应用程序,我不知道这是原因还是其他原因。
提前致谢。
为了代码可读性,我正在创建自定义函数接口,同时将其作为映射器传递给map(...),编译错误即将到来。需要帮忙。下面的例子简化了这个问题。例如
@FunctionalInterface
public interface Try<K,T> {
public K apply(T t);
}
public class Concrete{
//example
public static String checkFunc(Integer integer) {
return "Vivek";
}
}
public class CustomTest {
public static void main(String[] args) {
List<Integer> integers = Arrays.asList(1,2,3);
Try<String,Integer> try1 = Concrete::checkFunc;
integers.parallelStream().map(try1); // compile error
//The method map(Function<? super Integer,? extends R>) in the type Stream<Integer> is not
//applicable for the arguments (Try<String,Integer>)
integers.parallelStream().map(Concrete::checkFunc); // this is perfectly fine
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试传递类似上面的映射器。如何正确地做到这一点?
使用 JDK 16,我声明了两个注释:
@Target({ ElementType.RECORD_COMPONENT})
@Retention(RetentionPolicy.RUNTIME)
public @interface A {}
@Target({ ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface B {}
Run Code Online (Sandbox Code Playgroud)
我声明了一个像这样的记录类?
public record User(@A @B long id, String name, int age) {}
Run Code Online (Sandbox Code Playgroud)
然后我使用反射来获取id的注解,即:
Annotation[] annotations = fields[0].getAnnotations();
Run Code Online (Sandbox Code Playgroud)
但是 的大小annotations是 1 而我只有@B,这是为什么呢?谢谢
我有两个枚举如下
第一的
public enum firstEnum {
ALL_PRODUCT,
SPECIFIC_COLLECTION,
SPECIFIC_PRODUCT
}
Run Code Online (Sandbox Code Playgroud)
第二
public enum secondEnum {
PRODUCT,
COLLECTION,
PRODUCT
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个通用方法来将一种类型转换为另一种类型,如下所示
public record EnumCasting() {
public <E1,E2> E2 CastOneEnumToAnother(E1 enumFirst, E2 enumSecond) {
return // some logic to convert
}
}
Run Code Online (Sandbox Code Playgroud)
不知道我怎么能做到这一点,任何帮助将不胜感激。 firstEnum.ALL_Product should return secondEnum.Product, firstEnum.SPECIFIC_COLLECTION should return secondEnum.COLLECTION
我有一个专门用于在运行时设置字段的测试框架。目的是设置测试用例。期待升级到 Java 14+ 记录,我注意到现有实用程序(例如ReflectionTestUtils.setField和PropertyAccessorFactory.forDirectFieldAccess)适用于普通私有最终字段,但不适用于记录字段。
这是 JVM 的限制,还是这些实用程序的限制?
我试图捕获命令行参数并将其存储为字符串,但是当我尝试将其转换为int时遇到编译器错误:
错误是:初始化使指针从整数变为无强制转换[默认启用] char test = argv [1];
#include <stdio.h>
int main(int argc, char** argv)
{
char test = argv[1];
printf("%c\n", test);
return 0;
}
Run Code Online (Sandbox Code Playgroud)