Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按日期对对象列表进行分组?_Java_Collections_Grouping - Fatal编程技术网

Java 如何按日期对对象列表进行分组?

Java 如何按日期对对象列表进行分组?,java,collections,grouping,Java,Collections,Grouping,我的班级: public class Proposal { Date createDate; // ... } 我们有两个对象java.util.Date,并且确信此集合的对象位于这两个日期之间。如何在这些日期之间按天划分这些对象,以便我可以按日期获得这些对象的列表?类似这样的方法可以获得其中一个列表List inDateList=List.stream().filter(o->startDatei,Collectors.toSet());//您想要什么类型的存储桶。 } 类似这样的内

我的班级:

public class Proposal {
  Date createDate;
  // ...
}

我们有两个对象
java.util.Date
,并且确信此集合的对象位于这两个日期之间。如何在这些日期之间按天划分这些对象,以便我可以按日期获得这些对象的列表?

类似这样的方法可以获得其中一个列表
List inDateList=List.stream().filter(o->startDate

然后
List outDateList=newarraylist(List);outDateList.removeAll(inDateList)

编辑 只是想澄清一下我上面的笔记

public Map<String, Set<Proposal>> groupProposals(Iterable<Proposal> proposals) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return proposals.stream()
//GroupingBy creates the Map<Key, Collection<Something>>
.collect(Collectors.groupingBy(p->sdf.format(p.getCreateDate()),//Creates the Key and buckets
        Collectors.mapping(i-> i, Collectors.toSet()))); //what kind of buckets do you want. 
}
公共地图组提案(Iterable提案){
SimpleDataFormat sdf=新的SimpleDataFormat(“yyyyMMdd”);
返回建议。stream()
//GroupingBy创建地图
.collect(Collectors.groupingBy(p->sdf.format(p.getCreateDate()),//创建键和存储桶
Collectors.mapping(i->i,Collectors.toSet());//您想要什么类型的存储桶。
}

类似这样的内容可以获取其中一个列表
List inDateList=List.stream().filter(o->startDate

然后
List outDateList=newarraylist(List);outDateList.removeAll(inDateList)

编辑 只是想澄清一下我上面的笔记

public Map<String, Set<Proposal>> groupProposals(Iterable<Proposal> proposals) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return proposals.stream()
//GroupingBy creates the Map<Key, Collection<Something>>
.collect(Collectors.groupingBy(p->sdf.format(p.getCreateDate()),//Creates the Key and buckets
        Collectors.mapping(i-> i, Collectors.toSet()))); //what kind of buckets do you want. 
}
公共地图组提案(Iterable提案){
SimpleDataFormat sdf=新的SimpleDataFormat(“yyyyMMdd”);
返回建议。stream()
//GroupingBy创建地图
.collect(Collectors.groupingBy(p->sdf.format(p.getCreateDate()),//创建键和存储桶
Collectors.mapping(i->i,Collectors.toSet());//您想要什么类型的存储桶。
}
像这样的东西

public Map<String, Set<Proposal>> groupProposals(Iterable<Proposal> proposals) {
    Map<String, Set<Proposal>> map = new HashMap<>();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    for (Proposal p : proposals) {
        String key = sdf.format(p.getCreateDate());
        if (!map.containsKey(key)) {
            map.put(key, new HashSet<>());
        }
        map.get(key).add(p);
    }
    return map;
}
公共地图组提案(Iterable提案){
Map Map=newhashmap();
SimpleDataFormat sdf=新的SimpleDataFormat(“yyyyMMdd”);
关于(提案p:提案){
String key=sdf.format(p.getCreateDate());
如果(!map.containsKey(键)){
put(key,newhashset());
}
map.get(key)、add(p);
}
返回图;
}
像这样的东西

public Map<String, Set<Proposal>> groupProposals(Iterable<Proposal> proposals) {
    Map<String, Set<Proposal>> map = new HashMap<>();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    for (Proposal p : proposals) {
        String key = sdf.format(p.getCreateDate());
        if (!map.containsKey(key)) {
            map.put(key, new HashSet<>());
        }
        map.get(key).add(p);
    }
    return map;
}
公共地图组提案(Iterable提案){
Map Map=newhashmap();
SimpleDataFormat sdf=新的SimpleDataFormat(“yyyyMMdd”);
关于(提案p:提案){
String key=sdf.format(p.getCreateDate());
如果(!map.containsKey(键)){
put(key,newhashset());
}
map.get(key)、add(p);
}
返回图;
}

从Java 8开始,这可以通过以下方式无缝完成:

Map groupedByDate=propositions.stream()
.collect(Collectors.groupingBy(提案::getDate));

从Java 8开始,这可以通过以下方式无缝完成:

Map groupedByDate=propositions.stream()
.collect(Collectors.groupingBy(提案::getDate));

您不明白。我每天都要打破这个名单。假设日期1=2010年1月1日;日期2=2011年1月1日。我需要将此列表分为365(天)。您不明白。我每天都要打破这个名单。假设日期1=2010年1月1日;日期2=2011年1月1日。我需要将此列表分为365(天)。最近使用流和映射可以删除For循环,只需返回
propositions.stream().collect(Collectors.groupby(p->sdf.format(p.getCreateDate()),Collectors.mapping(I->I,Collectors.toSet())最近使用流和映射可以删除For循环,只返回
propositions.stream().collect(Collectors.groupby(p->sdf.format(p.getCreateDate()),Collectors.mapping(i->i,Collectors.toSet())