当前位置: 首页 > 知识库问答 >
问题:

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

房育
2023-03-14

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

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));

我想生成另一张 == 的地图

这是我的标准。如果0位置的绝对值大于1。--

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()));
    }
    
    
}

这是运行输出

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)    

请看留言。谢谢你们!https://i.stack.imgur.com/iaK7j.jpg

共有1个答案

洪光霁
2023-03-14

您很接近,但是对条目进行排序然后收集到默认映射(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)));

这假设您希望每个列表的第一项作为新映射的每个条目的值。

如果需要按键排序的条目,您可能需要创建TreeMap

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)));

这将使用Collectors.toMap的重载版本,该版本需要映射的工厂。

 类似资料:
  • 我是scala和Spark的新手,我有以下大小写类A ClassCastException:Scala.Collection.Mutable.WrappDarRay$OFRef不能强制转换为java.util.List 请帮忙。

  • 此方法返回数字的绝对值。 语法 (Syntax) Math.abs( x ) ; 参数 (Parameter) X - 代表一个数字 返回值 (Return Value) 返回数字的绝对值 例子 (Example) console.log("---Math.abs()---") console.log("Math.abs(-5.5) : "+Math.abs(-5.5)) cons

  • 我将游标声明放在准备好的语句中,然后执行它,然后返回一个

  • vector 通过整型索引来存储值,而 HashMap (散列表)通过键(key)来存储值。HashMap 的键可以是布尔型、整型、字符串,或任意实现了 Eq 和 Hash trait 的其他类型。在下一节将进一步介绍。 和 vector 类似,HashMap 也是可增长的,但 HashMap 在空间多余时能够缩小自身(原文:HashMaps can also shrink themselves

  • 这是我唯一的代码: