当前位置: 代码迷 >> java >> 如何按属性对对象列表进行分组,然后使用(Key,Value)对迭代结果?
  详细解决方案

如何按属性对对象列表进行分组,然后使用(Key,Value)对迭代结果?

热度:87   发布时间:2023-08-02 11:01:19.0

我想按属性对对象列表进行分组,然后使用(Key,Value)对迭代结果。

我已经在Java 8中找到了使用如下属性对对象列表进行分组的方法

// filteredPageLog has the filtered results from PageLog entity.

Map<String, List<PageLog>> results = 
filteredPageLog.stream().collect(Collectors.groupingBy(p -> p.getSessionId()));

但结果将只有入口集(在entrySet属性中有值)。 keySet和valueSet将具有空值。 我想迭代一些类似的东西

results.forEach((key,value) -> {
//logic
});

使用

results.entrySet().forEach(entry -> {
     var key = entry.getKey();
     var value = entry.getValue();
//logic
});

虚拟map

Map<String,String> map = new HashMap() {{
             put("1","20");
             put("2","30");
           }};

你可以用两种方式做到:

1. Map<K, V>.forEach()需要一个BiConsumer<? super K,? super V> BiConsumer<? super K,? super V> BiConsumer<? super K,? super V>作为参数, BiConsumer<T, U>抽象方法的签名是accept(T t, U u)

map.forEach((keys,values) -> { String k = keys ;
                               String v= values;
                                //logic goes here
                              });

2. Map<K, V>.entrySet().forEach()期望Consumer<? super T> Consumer<? super T>作为参数, Consumer<T>抽象方法的签名是accept(T t)

map.entrySet().forEach((entry) -> { String k = entry.getKey();
                                    String v= entry.getValue();
                                    //logic goes here
                                   });       

Java中没有元组。 您可以找到更详细的解释。 您可以迭代键,值或条目,但不能迭代元组。

  相关解决方案