How to convert a List to Map
我有以下代码,并希望使用java 8将Long列表转换为Map。
1 2 3
| Long globalVal = 10;
List <Long > queryLongs = Arrays. asList(600L,700L,800L );
Map <Long, Long > map = queryLongs. stream(). collect(Collectors. toMap(i ->i, globalVal ))); |
当我尝试将列表中的单个值映射为地图的键时,出现错误。
toMap的第二个参数也是Function,因此您不能只传递globalVal。
1 2 3
| Map <Long, Long > map = queryLongs. stream()
. collect(Collectors. toMap(Function. identity(),
i ->globalVal )); |
-
我得到的问题是我的变量globalVal应该是final或effectivefinal。 有办法克服这个问题吗?
-
@Erica你在哪里改变它的价值? 如果是,则不能在lambda表达式中使用它。 如果你不是,它实际上是最终的,一切都应该没问题。
-
@Erica,只需将它复制到一个临时的final变量中,然后在lambda中使用它
-
感谢@Didier的反馈。 将变量的副本保存到最终变量中有所帮助。
-
感谢@Eran解决方案
这是一种不使用流的方法(尽管仍使用Java 8功能):
1 2
| Map <Long, Long > map = new HashMap <>();
queryLongs. forEach(i -> map. put(i, globalVal )); |