Как отсортировать массив по формату дней недели android - PullRequest
0 голосов
/ 06 апреля 2020

У меня ниже json:

[
  {
    "id" : "12",
    "weekday": "Friday"
  },
  {
    "id" : "121",
    "weekday": "Monday"
  },
  {
    "id" : "123",
    "weekday": "Sunday"
  },
  {
    "id" : "222",
    "weekday": "Tuesday"
  }
]

Теперь я хочу перестроить его таким образом (пн-вс), где понедельник наступает первым, а воскресенье наступает последним.

Как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 06 апреля 2020

Это в Kotlin, но дает вам представление о том, что вы можете сделать. Вы можете создать метод или свойство, которое присваивает значение каждой модели JSON на основе дня недели, а затем сортирует на основе этого. Это чувствительно к регистру, вы также можете сделать это без учета регистра.

data class Weekday(

    @field:SerializedName("weekday")
    val weekday: String,

    @field:SerializedName("id")
    val id: String
)

private val Weekday.index: Int
    get() = when (weekday) {
        "Monday" -> 0
        "Tuesday" -> 1
        "Wednesday" -> 2
        "Thursday" -> 3
        "Friday" -> 4
        "Saturday" -> 5
        "Sunday" -> 6
        else -> 7
    }

fun sort() {
    val weekdays: List<Weekday> = /* TODO */

    val result = weekdays.sortedWith(object : Comparator<Weekday> {
        override fun compare(o1: Weekday, o2: Weekday): Int {
            return o1.index.compareTo(o2.index)
        }

    })
}
1 голос
/ 06 апреля 2020

Попробуйте это

    public JSONArray sortWeekDays(JSONArray daysArray) {
    JSONArray sortedWeekDays = new JSONArray();

    HashMap<String, Integer> dayMap = new HashMap<>();
    dayMap.put("Monday", 1);
    dayMap.put("Tuesday", 2);
    dayMap.put("Wednesday", 3);
    dayMap.put("Thursday", 4);
    dayMap.put("Friday", 5);
    dayMap.put("Saturday", 6);
    dayMap.put("Sunday", 7);

    ArrayList<Days> weekdays = new ArrayList<>();
    for (int i = 0; i < daysArray.length(); i++) {
        JSONObject dayObject = daysArray.getJSONObject(i);
        Days day = new Days(dayObject.getString("id"), dayObject.getString("weekday"));
        weekdays.add(day);
    }
    Collections.sort(weekdays, new Comparator<Days>() {
        @Override
        public int compare(Days o1, Days o2) {
            return dayMap.get(o1.getDay()).compareTo(dayMap.get(o2.getDay()));
        }
    });
    for (Days days : weekdays) {
        sortedWeekDays.put(days.getJsonObject());
    }

    return sortedWeekDays;
}

    public class Days {
String id = "";
String day = "";

public Days(String id, String day) {
    this.id = id;
    this.day = day;
}

public String getDay() {
    return day;
}

public JSONObject getJsonObject() {
    super.toString();
    JSONObject object = new JSONObject();
    object.put("id", id);
    object.put("weekday", day);
    return object;
}

}
0 голосов
/ 06 апреля 2020

Вы не сказали, каким должен быть ваш результирующий формат данных. Но предположим, что вы уже преобразовали его в List что-то вроде этого:

data class Day(val id: Int, val name: String)

, если JSON день недели всегда будет в Engli sh, вы можете отсортировать их как это:

val sortedList = list.sortedBy { DayOfWeek.valueOf(it.name.toUpperCase()).value }
0 голосов
/ 06 апреля 2020

Дать числа 0-6 по будням. Затем отсортируйте их по этим номерам

Здесь приведен простой пример

Как отсортировать строки, содержащие названия дней недели, в порядке возрастания

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...