Java 8 版本 - 带条件的列表映射

标签 java java-stream

我想知道如何检查和检索 MapList 的元素。

private Map<User, List<Offer>> shops = new ConcurrentHashMap<>(32);

//how to write this?
public List<Offer> getOffersOlderThan(int seconds){
    return this.shops.values().stream().forEach(
                x->x.stream()
                    .filter(y-> MyTime.currentTime.minusSeconds(seconds)
                                      .isBefore(y.getOfferBegin()))
}

我已经尝试使用 filter 代替第一个 forEach,但这也不起作用。

我想检索在 currentTime - 秒 之前具有 Timestamp 的所有 OfferList .

如何使用 Java 8 返回通用列表? 例如:

public List<Offer> getOffersByUser(User u){
    return this.shops.entrySet().stream().filter(x->x.getKey().getId()==u.getId())
               .collect(List::new) //how to parameterize?
}

最佳答案

对于所有优惠,请使用 flatMap()collect()

return shops.values().stream()
    .flapMap(List::stream)
    .filter(y-> MyTime.currentTime.minusSeconds(seconds).isBefore(y.getOfferBegin())
    .collect(Collectors.toList());

仅针对用户的优惠:

return shops.getOrDefault(user, Collections.emptyList())
    .filter(y-> MyTime.currentTime.minusSeconds(seconds).isBefore(y.getOfferBegin())
    .collect(Collectors.toList());

关于Java 8 版本 - 带条件的列表映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40954247/

相关文章:

java - 在 Ubuntu 中设置 Java 变量

java - 自定义资源 key 生成以促进向后兼容性

java - 为什么 Hibernate 不从 native 查询返回任何内容

Java 8 使用流和收集器映射到集合的子列表条目

Java 8 流将 List 项减少并组合到 Map

java - 在 Java 流中,peek 真的只用于调试吗?

java - 尝试将大型 json 数据发送到 android 中的服务器时出现 OutOfMemoryException?

java - 在旨在保存单个字符串的类层次结构中存储多个字符串

java - 使用 Java 8 迭代 Map<String,Object> 数组并返回 Map<Long,Long>

java - 如何将嵌套对象列表缩减为 Map