Java 根据日期按顺序转换arraylist元素
下面是数据库的输出。这些顺序顺序不可能每次都相同。这里的日期不是按顺序排列的。我需要按顺序安排这些天Java 根据日期按顺序转换arraylist元素,java,java-6,Java,Java 6,下面是数据库的输出。这些顺序顺序不可能每次都相同。这里的日期不是按顺序排列的。我需要按顺序安排这些天 ArrayList dayList= [ MONDAY : 9:00AM - 5:00PM , TUESDAY : 9:00AM - 5:00PM , WEDNESDAY: 9:00AM - 5:00PM , FRIDAY : 9:00AM - 5:00PM, THURSDAY : 9:00AM - 5:00PM , SATURDAY : C L O S E D , SUNDAY
ArrayList dayList= [ MONDAY : 9:00AM - 5:00PM , TUESDAY : 9:00AM - 5:00PM , WEDNESDAY: 9:00AM - 5:00PM , FRIDAY : 9:00AM - 5:00PM, THURSDAY : 9:00AM - 5:00PM , SATURDAY : C L O S E D , SUNDAY : C L O S E D , APPOINTMENT REQUIREMENT]
我需要按如下顺序转换输出:
[ MONDAY : 9:00AM - 5:00PM , TUESDAY : 9:00AM - 5:00PM , WEDNESDAY: 9:00AM - 5:00PM , THURSDAY : 9:00AM - 5:00PM , FRIDAY : 9:00AM - 5:00PM, SATURDAY : C L O S E D , SUNDAY : C L O S E D , APPOINTMENT REQUIREMENT]
像这样的东西可能有用。它使用正则表达式提取日期名称,并从Java8TimeAPI中从日期名称中获取日期编号
List<String> dayList = new ArrayList<>(Arrays.asList(
"SATURDAY : C L O S E D",
"TUESDAY : 9:00AM - 5:00PM",
"FRIDAY : 9:00AM - 5:00PM",
"MONDAY : 9:00AM - 5:00PM",
"SUNDAY : C L O S E D",
"WEDNESDAY: 9:00AM - 5:00PM",
"APPOINTMENT REQUIREMENT",
"THURSDAY : 9:00AM - 5:00PM"));
// Sort list by day name
Pattern p = Pattern.compile("^(\\w+DAY)\\s*:");
dayList.sort(Comparator.<String>comparingInt(s -> {
Matcher m = p.matcher(s);
return (m.find() ? DayOfWeek.valueOf(m.group(1)).getValue() : 8);
}));
// Print the sorted list
dayList.forEach(System.out::println);
更新Java 5+解决方案,输出与上述相同:
final class DayComparator implements Comparator<String> {
private final Pattern p = Pattern.compile(
"^(?:(MON)|(TUES)|(WEDNES)|(THURS)|(FRI)|(SATUR)|(SUN))DAY\\s*:");
public int compare(String s1, String s2) {
return dayValue(s1) - dayValue(s2);
}
private int dayValue(String s) {
Matcher m = this.p.matcher(s);
if (m.find())
for (int i = 1; ; i++)
if (m.start(i) != -1)
return i;
return 8;
}
}
最终类DayComparator实现Comparator{
私有最终模式p=Pattern.compile(
“^(?(星期一)|(星期二)|(星期三)|(星期四)|(星期五)|(星期六)|(星期日))日\\s*:”;
公共整数比较(字符串s1、字符串s2){
返回dayValue(s1)-dayValue(s2);
}
私有整数日值(字符串s){
匹配器m=此.p.匹配器;
if(m.find())
for(int i=1;i++)
如果(m.start(i)!=-1)
返回i;
返回8;
}
}
List dayList=新建ArrayList(Arrays.asList(
“星期六:C L O S E D”,
“星期二:上午9:00-下午5:00”,
“星期五:上午9:00-下午5:00”,
“星期一:上午9:00-下午5:00”,
“星期日:C L O S E D”,
“星期三:上午9:00-下午5:00”,
“任命要求”,
"星期四:上午九时至下午五时);;
//按日期名称对列表排序
sort(dayList,newdaycomarator());
//打印已排序的列表
for(字符串s:dayList)
系统输出打印项次;
这在Java 6中不起作用,但这一概念仍然适用,并且很容易翻译:
Java 8流替代方案:
private static final List<String> DATES =
List.of("MONDAY : 9:00AM - 5:00PM",
"TUESDAY : 9:00AM - 5:00PM",
"WEDNESDAY: 9:00AM - 5:00PM",
"FRIDAY : 9:00AM - 5:00PM",
"THURSDAY : 9:00AM - 5:00PM",
"SATURDAY : C L O S E D ",
"SUNDAY : C L O S E D",
"APPOINTMENT REQUIREMENT");
private static List<String> getSortedDates() {
EnumSet<DayOfWeek> dayOfWeeks = EnumSet.allOf(DayOfWeek.class);
return DATES.stream()
.map(p -> dayOfWeeks.stream()
.filter(q -> p.startsWith(q.name()))
.findAny()
.map(r -> new SimpleImmutableEntry<>(r.ordinal(), p))
.orElse(new SimpleImmutableEntry<>(dayOfWeeks.size(), p)))
.sorted(Comparator.comparing(SimpleImmutableEntry::getKey))
.map(SimpleImmutableEntry::getValue)
.collect(Collectors.toList());
}
public static void main(String[] args) {
getSortedDates().forEach(System.out::println);
}
私有静态最终列表日期=
名单(“星期一:上午9:00-下午5:00”,
“星期二:上午9:00-下午5:00”,
“星期三:上午9:00-下午5:00”,
“星期五:上午9:00-下午5:00”,
“周四:上午9:00-下午5:00”,
“星期六:C L O S E D”,
“星期日:C L O S E D”,
“任命要求”);
私有静态列表getSortedDates(){
EnumSet dayOfWeeks=EnumSet.allOf(DayOfWeek.class);
返回日期。stream()
.map(p->dayOfWeeks.stream()
.filter(q->p.startsWith(q.name()))
.findAny()
.map(r->newsimpleimutableentry(r.ordinal(),p))
.orElse(新的SimpleImmutableEntry(dayOfWeeks.size(),p)))
.sorted(Comparator.comparing(SimpleImmutableEntry::getKey))
.map(SimpleImutableEntry::getValue)
.collect(Collectors.toList());
}
公共静态void main(字符串[]args){
getSortedDates().forEach(System.out::println);
}
dayList
看起来像是列表的字符串
表示形式。您能否提供使用对象时的外观?你们有什么类型的?另外,最好是在DB
端对这些项目进行排序。数组中的值是字符串吗?@preciousbetine:-是的,所有值都是Arraylist中的字符串。您需要首先解析这些字符串,以便知道日期。你尝试过什么?它可能被否决了,因为OP根本没有试图解决这个问题。答案很好,我想不出更好的答案,但标签上写着java-6,也许是编辑?这在java 6For java 6&7中不起作用,大多数java.time功能在Three Ten Backport项目中可用。谢谢。但是有适用于Java6的示例代码吗?@Ravikanth-Huh?!?我刚刚添加了适用于Java5+的代码(这意味着适用于Java5和任何更高版本,包括Java5、6、7、8、9、10、11、12等)。谢谢。有运行Java6的示例代码吗?
private static final List<String> DATES =
List.of("MONDAY : 9:00AM - 5:00PM",
"TUESDAY : 9:00AM - 5:00PM",
"WEDNESDAY: 9:00AM - 5:00PM",
"FRIDAY : 9:00AM - 5:00PM",
"THURSDAY : 9:00AM - 5:00PM",
"SATURDAY : C L O S E D ",
"SUNDAY : C L O S E D",
"APPOINTMENT REQUIREMENT");
private static List<String> getSortedDates() {
EnumSet<DayOfWeek> dayOfWeeks = EnumSet.allOf(DayOfWeek.class);
return DATES.stream()
.map(p -> dayOfWeeks.stream()
.filter(q -> p.startsWith(q.name()))
.findAny()
.map(r -> new SimpleImmutableEntry<>(r.ordinal(), p))
.orElse(new SimpleImmutableEntry<>(dayOfWeeks.size(), p)))
.sorted(Comparator.comparing(SimpleImmutableEntry::getKey))
.map(SimpleImmutableEntry::getValue)
.collect(Collectors.toList());
}
public static void main(String[] args) {
getSortedDates().forEach(System.out::println);
}