将列表分成多个子列表

时间:2018-01-23 11:23:14

标签: java list arraylist

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "HH:mm"

    let date1 = dateFormatter.date(from: "14:05")

    let date2 = NSDate()

    var components1 = NSCalendar.current.dateComponents([.hour, .minute], from: date1!)

    let components2 = NSCalendar.current.dateComponents([.hour, .minute, .day, .month, .year], from: date2 as Date)

    components1.year = components2.year;
    components1.month = components2.month;
    components1.day = components2.day;

    let date3 = NSCalendar.current.date(from: components1)

    let timeIntervalInMinutes = date3!.timeIntervalSince(date2 as Date)/60

我想将userList划分为两个子列表。包含“星期一”到一个子列表的用户和用“星期二”包含到另一个子列表中的用户。

3 个答案:

答案 0 :(得分:3)

您可以使用Collectors.groupingBy()根据作为参数传递的函数对流的元素进行分组,并将它们存储在Map中,其中键是函数的结果,值是关联的List。 1}}:

 Map<String, List<User>> collect = userList.stream()
        .collect(Collectors.groupingBy(User::getDay));

答案 1 :(得分:2)

您可以使用groupingBy收集器,然后只需获取所需的地图值。

Map<String, List<User>> byDay = userlist.stream().collect(
  Collectors.groupingBy(User::getDay));

答案 2 :(得分:0)

列出的答案肯定是正确的,但如果你还不熟悉流,你可能会有点困惑。我将编写一个完全相同但不使用流的等效代码。也许你会更清楚:

Map<String, List<User>> usersByDay = new HashMap<>();
for(User u : userList)
{
    dayusers = usersByDay.getOrDefault(u.getDay(), new ArrayList<>());
    dayusers.add(u);
    usersByDay.put(u.getDay(), dayusers);
}

此实现假设您的User类的定义大致如下:

public class User
{
    private String day;
    private String name;
    private String surname;
    private String email;

    public User(....){...}

    public String getDay(){return day;}
    ...
}