相关疑难解决方法(0)

如何使用 Java Streams 为 HashMap 的多个键插入相同的值

假设我有一个 HashMap,我想将相同的值插入到键列表中。如何使用 Java 8 执行此操作,而无需迭代所有键并插入值?这更多的是一个 Java Streams 问题。

这是执行此操作的直接方法。这是我编写的示例代码,用于演示我想要实现的目标。

public void foo(List<String> keys, Integer value) {
    Map<String, Integer> myMap = new HashMap<>(); 
    for (String key : keys) {
        myMap.put(key, value);
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法使用 Java 8 流来执行上述操作?如何使用 Java 8 流避免 for 循环。谢谢!

[Edit-1] 下面是更好的代码片段。

public void foo() {
    Map<String, Integer> myMap = new HashMap<>(); 
    List<String> keys = getKeysFromAnotherFunction();
    Integer value = getValueToBeInserted(); // Difficult to show my actual use case. Imagine that some value is getting computed which has to be …
Run Code Online (Sandbox Code Playgroud)

java hashmap java-8 java-stream

3
推荐指数
1
解决办法
1305
查看次数

通用静态方法过多地约束类型

这个答案中,我尝试创建一个静态实用程序方法,使其List成为Map:

public static <K, T> Map<K, T> toMapBy(List<T> list,
        Function<? super T, ? extends K> mapper) {
    return list.stream().collect(Collectors.toMap(mapper, Function.identity()));
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好.但是,我发现该方法不能在与list.stream().collect(...)表达式相同的上下文中使用.该方法不够灵活.

List<Student> students = Arrays.asList();

Map<Long, Student> studentsById1 = students.stream()
        .collect(Collectors.toMap(Student::getId, Function.identity()));
Map<Long, Student> studentsById2 = toMapBy(students, Student::getId);

Map<Long, Person> peopleById1 = students.stream()
        .collect(Collectors.toMap(Student::getId, Function.identity()));
Map<Long, Person> peopleById2 = toMapBy(students, Student::getId);  // compile error!
Run Code Online (Sandbox Code Playgroud)

在这个例子中,Student是一个子类型,Person并有一个getId返回a 的方法Long.

最后一个语句失败incompatible types: inference variable T has …

java generics java-8

1
推荐指数
1
解决办法
424
查看次数

如何使用 Java 中对象的字段将对象列表转换为映射

我有以下用例:

    User Object is as followed:
    UserId      payload
    123         abc1
    123         abc2
    456         pqr1
    456         pqr2
    678         xyz1

And after iterating above list<User Object>, Result should be like: 
{123=[abc1, abc2], 456=[pqr1,pqr2], 678=[xyz1]}
Run Code Online (Sandbox Code Playgroud)

这样我就可以使用键(123)的值(其他对象的列表)进行进一步处理。最好的方法是什么?

我在下面尝试过,但不确定如果对象大小增加,性能效率如何。

Map<String,List<String>> userMap = new HashMap<String, List<String>>();     
for(User user: users) {
  String userId = user.getUserId();
  List<String> payloads = new ArrayList<String>();
  if(userMap.containsKey(userId)) {
      payload = userMap.get(userId);
                  payloads.add(user.getPayload());
      userMap.put(userId, payloads);
  }
  else {
      payloads.add(user.getPayload());
      userMap.put(user.getUserId(), payloads);
  }
 }
Run Code Online (Sandbox Code Playgroud)

java collections

1
推荐指数
1
解决办法
909
查看次数

将 List&lt;Object[]&gt; 数组转换为 Map

我正在尝试从 Objects[] 列表中制作一个 Hashmap,但我无法这样做。下面是我写的代码:

List<Object[]> adjustments =  query.getResultList();
Map<Integer, BigDecimal> dpaMap = adjustments.stream().collect(Collectors.toMap(a -> (Integer)a[0], a -> (BigDecimal)a[1]));
Run Code Online (Sandbox Code Playgroud)

我知道只有两个字段从查询中返回,它们具有与 Map 中提到的相同的类型,但它不起作用。请在这方面指导我。

提前致谢。

java lambda hashmap java-8 java-stream

0
推荐指数
1
解决办法
6132
查看次数

使用流将数组转换为映射

我有一个整数列表, [1,2,3,4,5]我想在应用乘法函数 (*5) 后将其转换为映射,如下所示:

 {1 = 5, 2 = 10, 3 = 15, 4 = 20, 5 = 25}
Run Code Online (Sandbox Code Playgroud)

我能够使用流并使用 map 函数来执行乘法,但我对如何将结果转换为 map 感到困惑。

myList.stream().map(n -> n * 5).collect( ... )
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗。

java lambda stream

0
推荐指数
1
解决办法
64
查看次数

有没有办法将Array转换为Map?

我有一个数组,我想转换为Map,这样数组中的第一个元素是键,第二个元素是值,依此类推.

我正在尝试以下内容:

Arrays.asList("Tamilnadu", "chennai", "Karnataka", "Bengluru")
                .stream()
                .collect(HashMap::new,
                        (a, b) -> a.put(b, ""),//value should be next element in array
                        (a, b) -> a.putAll(b)
                );
Run Code Online (Sandbox Code Playgroud)

我的困惑是如何在同一个迭代中获取下一个元素,以便我可以做到a.put(b,nextElementToB).

有人可以通过使用流来帮助解决这个问题,因为我想尝试使用函数式编程吗?迭代将成为这样做的唯一方法吗?

java java-8 java-9 java-10

-1
推荐指数
1
解决办法
1424
查看次数

标签 统计

java ×6

java-8 ×4

hashmap ×2

java-stream ×2

lambda ×2

collections ×1

generics ×1

java-10 ×1

java-9 ×1

stream ×1