首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我想从下面的hashmap中获取公共时间集的工作日

我想从下面的hashmap中获取公共时间集的工作日
EN

Stack Overflow用户
提问于 2018-02-06 16:32:27
回答 2查看 376关注 0票数 2

我有一个如下的hashmap:

代码语言:javascript
运行
复制
HashMap<String, String> days = new HashMap<String, String>(){
    days.put("MON", "9-5");
    days.put("TUE", "9-4");
    days.put("WED", "9-5");
    days.put("THU", "9-5");
    days.put("FR", "9-5");
    days.put("SAT", "Closed");
    days.put("SUN", "Closed");
};

我想要显示以下输出:

MON-WED-THU-FRI : 9-5, TUE: 9-4, SAT-SUN : Closed

注意: hashmap("9-5")的值可能会根据来自管理面板的输入而变化

我已经完成了以下代码,但它太长了:

代码语言:javascript
运行
复制
private void days() {

    String timing1 = null;
    String timing2 = null;
    String timing3 = null;
    String timing4 = null;
    String timing5 = null;
    String timing6 = null;
    String timing7 = null;

    ArrayList<String> time1 =new ArrayList<>();
    ArrayList<String> time2 =new ArrayList<>();
    ArrayList<String> time3 =new ArrayList<>();
    ArrayList<String> time4 =new ArrayList<>();
    ArrayList<String> time5 =new ArrayList<>();
    ArrayList<String> time6 =new ArrayList<>();
    ArrayList<String> time7 =new ArrayList<>();

迭代散列映射并取值(即存储在受尊重变量中的时间

代码语言:javascript
运行
复制
for (Map.Entry<String, String> entry : days.entrySet()) {
    String key = entry.getKey();
    Object value = entry.getValue();
    System.out.println("key" + key + "Val" + value.toString());

    if (timing1 ==null || timing1.equals(value.toString())){
        timing1 = value.toString();
        continue;
    }

    if (timing2 ==null || timing2.equals(value.toString())){
        timing2 = value.toString();
        continue;
    }

    if (timing3 ==null || timing3.equals(value.toString())){
        timing3 = value.toString();
        continue;
    }

    if (timing4 ==null || timing4.equals(value.toString())){
        timing4 = value.toString();
        continue;
    }

    if (timing5 ==null || timing5.equals(value.toString())){
        timing5 = value.toString();
        continue;
    }

    if (timing6 ==null || timing6.equals(value.toString())){
        timing6 = value.toString();
        continue;
    }

    if (timing7 ==null || timing7.equals(value.toString())){
        timing7 = value.toString();
    }
}

基于来自附加关键字ie的散列映射的值。天数名称(例如MON)添加到受人尊敬的array-list

代码语言:javascript
运行
复制
for (Map.Entry<String, String> entry : days.entrySet()) {
    String key = entry.getKey();
    Object value = entry.getValue();

    if (timing1!=null && timing1.equals(value.toString())){
        time1.add(key);
        continue;
    }

    if (timing2!=null && timing2.equals(value.toString())){
        time2.add(key);
        continue;
    }

    if (timing3!=null && timing3.equals(value.toString())){
        time3.add(key);
        continue;
    }

    if (timing4!=null && timing4.equals(value.toString())){
        time4.add(key);
        continue;
    }

    if (timing5!=null && timing5.equals(value.toString())){
        time5.add(key);
        continue;
    }

    if (timing6!=null && timing6.equals(value.toString())){
        time6.add(key);
        continue;
    }

    if (timing7!=null && timing7.equals(value.toString())){
        time7.add(key);
        // continue;
    }
}
EN

回答 2

Stack Overflow用户

发布于 2018-02-06 17:05:55

请看看下面的内容是否有帮助。但是,这些值并没有按照此输出进行排序。

打印: 9-4 TUE

9-5清华WED FR MON

闭合SAT太阳

代码语言:javascript
运行
复制
public void formatMap(HashMap<String,String> hMap){
    HashMap<String, String> formattedMap = new HashMap<String, String>();
    Set<String> lKeys = (Set)hMap.keySet();

    for(String sKey : lKeys){

        String sValue = hMap.get(sKey);
        if(formattedMap.get(sValue) == null){
            formattedMap.put(sValue, sKey);
        }else{
            String temp = formattedMap.get(sValue);
            temp += " "+sKey;
            formattedMap.put(sValue, temp);
        }

    }

    lKeys = (Set)formattedMap.keySet();
    for(String s : lKeys){
        System.out.println(s +" "+formattedMap.get(s));
    }

}
票数 1
EN

Stack Overflow用户

发布于 2018-02-06 17:07:54

好吧,使用一些对象会更容易:

首先是一个用于存储时间表的类

代码语言:javascript
运行
复制
package schedule;

public class DaySchedule {

    String weekDay;
    int minHour, maxHour;
    boolean open;

    public DaySchedule(String weekDay, int minHour, int maxHour, boolean open) {
        this.weekDay = weekDay;
        this.minHour = minHour;
        this.maxHour = maxHour;
        this.open = open;
    }

    public String getWeekDay() {
        return weekDay;
    }


    /**
     * Returns a unique key based on min and max hour
     * -1 is the key for closed status
     * @return int value
     */
    public String getKey() {
        if (open)
            return String.valueOf(minHour)+"-"+String.valueOf(maxHour);
        else
            return "Closed";
    }



}

然后使用一个实用程序类来构建最终结果。

代码语言:javascript
运行
复制
package schedule;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class ScheduleBuilder {

    HashMap<String, StringBuilder> builderHashMap = new HashMap<>();

    public void addSchedule(DaySchedule daySchedule) {
        String key = daySchedule.getKey();

        if (builderHashMap.containsKey(daySchedule.getKey())) {
            StringBuilder stringBuilder = builderHashMap.get(key);
            // If there is a string builder, there is already something in it, so add a -
            stringBuilder.append('-');
            stringBuilder.append(daySchedule.getWeekDay());
        } else {
            builderHashMap.put(key, new StringBuilder(daySchedule.getWeekDay()));
        }

    }


    public String toString(){

        StringBuilder result = new StringBuilder();

        Iterator iterator = builderHashMap.entrySet().iterator();
           while (iterator.hasNext()) {

               if(result.length()>0){
                   result.append(',');
               }

               Map.Entry pair = (Map.Entry)iterator.next();
               result.append(pair.getValue());
               result.append(":");
               result.append(pair.getKey());
               iterator.remove(); // avoids a ConcurrentModificationException
           }
      return result.toString();
    }
}

为了测试..。

代码语言:javascript
运行
复制
package schedule;

import java.util.ArrayList;
import java.util.Iterator;

public class Test {

    public static void main(String[] args) {


        ArrayList<DaySchedule> dayScheduleArrayList = new ArrayList<DaySchedule>(7);

        dayScheduleArrayList.add(new DaySchedule("MON", 9, 5, true));
        dayScheduleArrayList.add(new DaySchedule("TUE", 9, 4, true));
        dayScheduleArrayList.add(new DaySchedule("WED", 9, 5, true));
        dayScheduleArrayList.add(new DaySchedule("THU", 9, 5, true));
        dayScheduleArrayList.add(new DaySchedule("FR", 9, 5, true));
        dayScheduleArrayList.add(new DaySchedule("SAT", 0, 0, false));
        dayScheduleArrayList.add(new DaySchedule("SUN", 0, 0, false));

        ScheduleBuilder scheduleBuilder = new ScheduleBuilder();
        for (Iterator<DaySchedule> iterator = dayScheduleArrayList.iterator(); iterator.hasNext(); ) {
            DaySchedule daySchedule = iterator.next();
            scheduleBuilder.addSchedule(daySchedule);
        }

        System.out.println("scheduleBuilder = " + scheduleBuilder);

    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48638589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档