我是Java 8的新手,不知道如何使用流和它的排序方法.如果我有如下地图,如何按值对此地图进行排序,以便只使用Java 8获取前10个条目.
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 10);
map.put("b", 30);
map.put("c", 50);
map.put("d", 40);
map.put("e", 100);
map.put("f", 60);
map.put("g", 110);
map.put("h", 50);
map.put("i", 90);
map.put("k", 70);
map.put("L", 80);
Run Code Online (Sandbox Code Playgroud)
我知道在Java 8之前,我们可以将这个链接排序:https://stackoverflow.com/a/109389/4315608
我已经使用hashCode()了StringAPI的方法,它为以下代码生成的值为99162322:
String str = "hello";
System.out.println(str.hashCode());
Run Code Online (Sandbox Code Playgroud)
是否有任何Java API可以生成仅5位数字(63346)的哈希值,例如下面的Oracle SQL?
select ORA_HASH('hello','99999') from dual --63346
Run Code Online (Sandbox Code Playgroud) 我的地图看起来像这样
private Map<String, LinkedHashSet<String>> map = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
在传统方法中,我可以通过按键检查为地图添加价值,如下所示
public void addEdge(String node1, String node2) {
LinkedHashSet<String> adjacent = map.get(node1);
if (adjacent == null) {
adjacent = new LinkedHashSet();
map.put(node1, adjacent);
}
adjacent.add(node2);
}
Run Code Online (Sandbox Code Playgroud)
使用Java 8,我可以做这样的事情,与此同时我也得到相同的输出。
map.compute(node1, (k,v)-> {
if(v==null) {
v=new LinkedHashSet<>();
}
v.add(node2);
return v;
});
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来处理Java 8?
我试过两个destroy并destroyForcibly使用下面的代码 -
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("current process id:"+currentProcess.getPid());
currentProcess.destroyForcibly();
Run Code Online (Sandbox Code Playgroud)
但在两种情况下都获得例外
线程"main"中的异常java.lang.IllegalStateException:java.base/java.lang.ProcessHandleImpl.destroyForcibly中java.base/java.lang.ProcessHandleImpl.destroyProcess(ProcessHandleImpl.java:308)中不允许销毁当前进程( ProcessHandleImpl.java:331)在util.CurrentProcess.main(CurrentProcess.java:18)
如果我使用三元运算符,我会收到空指针异常。
Integer val = null;
Object res = val == null ? val : val.intValue();
Run Code Online (Sandbox Code Playgroud)
但不能与 if else 一起使用
Integer val = null;
Object res;
if( val == null ) {
res = val;
} else {
res = val.intValue();
}
Run Code Online (Sandbox Code Playgroud)
谁能解释一下为什么吗?
谢谢苏达尔