Java 带有Math.abs标准的HashMap流(双精度)

Java 带有Math.abs标准的HashMap流(双精度),java,java-8,hashmap,java-stream,key-value,Java,Java 8,Hashmap,Java Stream,Key Value,请帮助我学习在地图之间导航。我有一张地图的散列图 我想生成另一个==>HashMap的映射 这是我的标准。如果0位置的绝对值大于1。-->然后将键和值保存到新的queryPositions hashmap中。提前谢谢你 import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public

请帮助我学习在地图之间导航。我有一张地图的散列图

我想生成另一个==>HashMap的映射

这是我的标准。如果0位置的绝对值大于1。-->然后将键和值保存到新的queryPositions hashmap中。提前谢谢你

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class NewClass {

    public static void main(String[] args) {

        Map<String, List<Double>> sourceHashMapFind = new HashMap<>();

        sourceHashMapFind.put("AAA", Arrays.asList(-5.6, 7.9, 5.7, 6.3));
        sourceHashMapFind.put("BBB", Arrays.asList(0.6, 5.8, 6.9, 8.0));
        sourceHashMapFind.put("CCC", Arrays.asList(0.5, 5.6, 6.9, 8.0));

        
        
         HashMap<String, Double> queryPositions = sourceHashMapFind.entrySet()
                .stream()
                .sorted(Map.Entry.comparingByKey())
                .filter(entry -> Math.abs(entry.getValue().get(0)) > 1.0)
                .distinct()
                .collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue()));
    }
    
    
}
导入java.util.array;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入java.util.stream.collector;
公共类新类{
公共静态void main(字符串[]args){
Map sourceHashMapFind=新建HashMap();
sourceHashMapFind.put(“AAA”,Arrays.asList(-5.6,7.9,5.7,6.3));
sourceHashMapFind.put(“BBB”,Arrays.asList(0.6,5.8,6.9,8.0));
sourceHashMapFind.put(“CCC”,Arrays.asList(0.5,5.6,6.9,8.0));
HashMap queryPositions=sourceHashMapFind.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.filter(entry->Math.abs(entry.getValue().get(0))>1.0)
.distinct()
.collect(Collectors.toMap(entry->entry.getKey(),entry->entry.getValue());
}
}
这里是运行输出

run:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - incompatible types: inference variable R has incompatible bounds
    equality constraints: java.util.Map<K,U>
    upper bounds: java.util.HashMap<java.lang.String,java.lang.Double>,java.lang.Object
    at P2020_0928_stackOverflow_MyQuestion.NewClass.main(NewClass.java:21)
C:\Users\User1\AppData\Local\NetBeans\Cache\9.0\executor-snippets\run.xml:111: The following error occurred while executing this line:
C:\Users\User1\AppData\Local\NetBeans\Cache\9.0\executor-snippets\run.xml:94: Java returned: 1
BUILD FAILED (total time: 1 second)    
运行:
线程“main”java.lang.RuntimeException中的异常:不可编译的源代码-不兼容的类型:推理变量R具有不兼容的边界
等式约束:java.util.Map
上限:java.util.HashMap,java.lang.Object
在P2020_0928_stackOverflow_MyQuestion.NewClass.main(NewClass.java:21)
C:\Users\User1\AppData\Local\NetBeans\Cache\9.0\executor snippets\run.xml:111:执行此行时发生以下错误:
C:\Users\User1\AppData\Local\NetBeans\Cache\9.0\executor snippets\run.xml:94:Java返回:1
生成失败(总时间:1秒)
请看留言。谢谢你们!

您已经接近了,但是没有必要对条目进行排序,然后收集到默认映射(
HashMap
),该映射不保留插入顺序。另外,为什么要使用
.distinct()

我会这样做:

Map<String, Double> queryPositions = sourceHashMapFind.entrySet().stream()
    .filter(e -> Math.abs(e.getValue().get(0)) > 1.0)
    .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue().get(0)));

这使用了重载版本的,该版本期望映射有一个工厂。

您已经接近,但是没有必要对条目进行排序,然后收集到默认映射(
HashMap
),该映射不保留插入顺序。另外,为什么要使用
.distinct()

我会这样做:

Map<String, Double> queryPositions = sourceHashMapFind.entrySet().stream()
    .filter(e -> Math.abs(e.getValue().get(0)) > 1.0)
    .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue().get(0)));

这使用了重载版本的,该版本期望映射有一个工厂。

您期望的输出是什么?您的代码的输出是什么?您好,也许可以使用
entry.getValue().get(0)
作为
toMap
函数的值部分。@Sweeper:预期的输出应该是存储保存到HashMap查询位置的字符串“AAA”和双值-5.6。因为(-5.6)的绝对值大于1.0。@IronMan:尝试过这个建议,它不起作用。这里是到目前为止的输出。谢谢你们。最终地图的价值应该是多少?列表的第一个值是什么?它的绝对值是多少?列表中所有值的总和?请澄清您的预期产量是多少?您的代码的输出是什么?您好,也许可以使用
entry.getValue().get(0)
作为
toMap
函数的值部分。@Sweeper:预期的输出应该是存储保存到HashMap查询位置的字符串“AAA”和双值-5.6。因为(-5.6)的绝对值大于1.0。@IronMan:尝试过这个建议,它不起作用。这里是到目前为止的输出。谢谢你们。最终地图的价值应该是多少?列表的第一个值是什么?它的绝对值是多少?列表中所有值的总和?请澄清,非常感谢!为了回答这个问题,我实际上是一个java新手,所以使用了distinct()。再次感谢您@用户
distinct()
是不需要的,因为您正在流式传输贴图,并且贴图从来没有重复的键。因此,您的最终地图中不会有重复的关键点,即使是Hi fps,非常感谢!为了回答这个问题,我实际上是一个java新手,所以使用了distinct()。再次感谢您@用户
distinct()
是不需要的,因为您正在流式传输贴图,并且贴图从来没有重复的键。因此,在最终贴图中也不会有重复的关键点
Map<String, Double> queryPositions = sourceHashMapFind.entrySet().stream()
    .filter(e -> Math.abs(e.getValue().get(0)) > 1.0)
    .collect(Collectors.toMap(
        e -> e.getKey(), 
        e -> e.getValue().get(0),
        (oldValue, newValue) -> newValue,
        TreeMap::new)));