Java 如何从当前月份开始订购月份名称
假设这是用于存储月份的数组Java 如何从当前月份开始订购月份名称,java,sorting,Java,Sorting,假设这是用于存储月份的数组 String months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; 我已使用此方法获取当前月份 int monthName=calendar.get(Calendar.MONTH); 从当前月份开始,将数
String months[] = {"January", "February", "March", "April",
"May", "June", "July", "August", "September",
"October", "November", "December"};
我已使用此方法获取当前月份
int monthName=calendar.get(Calendar.MONTH);
从当前月份开始,将数组重新排序为新数组或arraylist的最佳方式是什么
当前月份是8月,因此需要的数组或Arraylist是
months[] = {"August", "September", "October", "November",
"December", "January", "February", "March", "April",
"May", "June", "July"};
使用比较器的整个解决方案。
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
/**
* The Class Test.
*/
public class Test {
/**
* The main method.
*
* @param args the arguments
*/
public static void main(String[] args) {
// First convert to List.
String[] monthsAsArray = { "August", "September", "October", "November", "December", "January", "February",
"March", "April", "May", "June", "July" };
List<String> months = Arrays.asList(monthsAsArray);
// Comparator can do a lot of the work for us...
final Comparator<String> dateCompare = new Comparator<String>() {
public int compare(String o1, String o2) {
Date month1 = null, month2 = null;
try {
SimpleDateFormat s = new SimpleDateFormat("MMM");
month1 = s.parse(o1);
month2 = s.parse(o2);
} catch (Exception e) {
e.printStackTrace();
}
return month1.compareTo(month2);
}
};
Collections.sort(months, dateCompare);
System.out.print(months);
}
}
import java.text.simpleDataFormat;
导入java.util.array;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.Date;
导入java.util.List;
/**
*班级考试。
*/
公开课考试{
/**
*主要方法。
*
*@param将参数设置为args
*/
公共静态void main(字符串[]args){
//首先转换为列表。
String[]monthsasaray={“八月”、“九月”、“十月”、“十一月”、“十二月”、“一月”、“二月”,
“三月”、“四月”、“五月”、“六月”、“七月”};
列表月份=Arrays.asList(monthsaarray);
//比较器可以为我们做很多工作。。。
最终比较器dateCompare=新比较器(){
公共整数比较(字符串o1、字符串o2){
日期month1=null,month2=null;
试一试{
SimpleDataFormat s=新的SimpleDataFormat(“MMM”);
month1=s.parse(o1);
month2=s.parse(o2);
}捕获(例外e){
e、 printStackTrace();
}
返回月1。比较月2;
}
};
集合。排序(月份、日期比较);
系统输出打印(月);
}
}
因为您已经在数组中定义了月份的名称:
String months[] = {"January", "February", "March", "April",
"May", "June", "July", "August", "September",
"October", "November", "December"};
您可以使用如下简单循环:
String[] newArray = new String[12];
Calendar calendar = Calendar.getInstance();
int monthName = calendar.get(Calendar.MONTH);
int i = 0;
do {
newArray[i] = months[(monthName + i) % 12];
i++;
} while (i < 12);
System.out.println(Arrays.toString(newArray));
这我怎么能做到呢
int pos = -1;
for(int i=0;i<months.length;i++)
if(months[i].equals(monthName))
{
pos = i;
break;
}
String[] newOrderedMonths = new String[12];
int index = 0;
for(int i = pos ; i < months.length; i++ )
newOrderedMonths[index++] = months[i];
for(int i = 0 ; i < pos; i++ )
newOrderedMonths[index++] = months[i];
intpos=-1;
对于(int i=0;i请尝试以下操作:
String[] newMonths = Arrays.copyOfRange(months, monthName, monthName + 12);
System.arraycopy(months, 0, newMonths, 12 - monthName, monthName);
可以使用Collections.rotate。要向左旋转,可以使用元素的负值
String months[] = {"January", "February", "March", "April",
"May", "June", "July", "August", "September",
"October", "November", "December"};
int monthIndex = LocalDate.now().getMonth().ordinal();//indexed from 0
Collections.rotate(Arrays.asList(months), -monthIndex); //negative value rotates to left
System.out.println(Arrays.toString(months));
输出:[八月、九月、十月、十一月、十二月、一月、二月、三月、四月、五月、六月、七月]
使用Java 8的月.values()
和集合.rotate()
:
这应该可以做到,使用Collections.rotate
给出了旋转时间的逻辑,并进行了相应的编码
import java.util.*;
public class Rotate {
public static void main(String[] args) {
String months[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September",
"October", "November", "December" };
List<String> mons = Arrays.asList(months);
System.out.println("Before : " + Arrays.toString(months));
// September is at 9the position so rotate it 4 times, i,e 13th position, 13%12 = 1
Collections.rotate(mons, 4);
months = (String[]) mons.toArray();
System.out.println("After : " + Arrays.toString(months));
}
}
import java.util.*;
公共课轮换{
公共静态void main(字符串[]args){
字符串月份[]={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”,
“十月”、“十一月”、“十二月”};
List mons=Arrays.asList(月);
System.out.println(“Before:+Arrays.toString(月));
//9月是9号,所以旋转4次,即13号位置,13%12=1
集合。轮换(mons,4);
月份=(字符串[])mons.toArray();
System.out.println(“之后:“+Arrays.toString(月));
}
}
对于那些很快或以后想要使用java 8执行相同操作的人来说,这只是另一个选项:)
List myMonth=Arrays.asList(Month.values());
Collections.rotate(myMonth,1-LocalDate.now().getMonthValue());
输出:
[八月、九月、十月、十一月、十二月、一月、二月、三月、四月、五月、六月、七月]
这个怎么样:
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
public class RotateDemo {
public static void main(String[] args)
{
String months[] = {"January", "February", "March", "April",
"May", "June", "July", "August", "September",
"October", "November", "December"};
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
System.out.println(month + "Date: " + date);
System.out.println("Original Array : " +
Arrays.toString(months));
Collections.rotate(Arrays.asList(months), month-2);
System.out.println("Modified Array : " +
Arrays.toString(months));
}
}
如果你不想改变输入数组,你可以看看这个可能的解决方案
public class MonthDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
String[] months = {"January", "February", "March", "April",
"May", "June", "July", "August", "September",
"October", "November", "December"};
// get index of current month
int monthIndex = calendar.get(Calendar.MONTH);
// array to keep the orderen month names
String[] monthOrdered = new String[months.length];
// create a stream with indexes for one year start with current month
IntStream.range(monthIndex, monthIndex + 12)
.sequential()
// fill the ordered array
.forEach(i -> monthOrdered[i - monthIndex] = months[i % 12]);
System.out.println("monthOrdered = " + Arrays.toString(monthOrdered));
}
}
输出(已包装)
检查Collections.rotate
[docs](例如,它按顺序返回月份(即1月-12月)。或者,如果删除Collections.sort,它将只打印原始数组。小心ordinal()
,因为这依赖于内部实现,最好使用getValue()
(虽然,几个月来,我敢打赌我们使用ordinal
是非常安全的)@HuguesM。是的,你是对的。ordinal
来自Enum,所以结果取决于月份在Month
Enum中的位置。只有从1月份开始,月份仍然被排序时,这才有效。我在这里使用它将一月映射到0(如果是第一个月,则旋转0个元素),并避免在旋转时使中的-1
或+1
代码复杂化。
import java.util.*;
public class Rotate {
public static void main(String[] args) {
String months[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September",
"October", "November", "December" };
List<String> mons = Arrays.asList(months);
System.out.println("Before : " + Arrays.toString(months));
// September is at 9the position so rotate it 4 times, i,e 13th position, 13%12 = 1
Collections.rotate(mons, 4);
months = (String[]) mons.toArray();
System.out.println("After : " + Arrays.toString(months));
}
}
List<Month> myMonth = Arrays.asList(Month.values());
Collections.rotate(myMonth, 1 - LocalDate.now().getMonthValue());
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
public class RotateDemo {
public static void main(String[] args)
{
String months[] = {"January", "February", "March", "April",
"May", "June", "July", "August", "September",
"October", "November", "December"};
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
System.out.println(month + "Date: " + date);
System.out.println("Original Array : " +
Arrays.toString(months));
Collections.rotate(Arrays.asList(months), month-2);
System.out.println("Modified Array : " +
Arrays.toString(months));
}
}
public class MonthDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
String[] months = {"January", "February", "March", "April",
"May", "June", "July", "August", "September",
"October", "November", "December"};
// get index of current month
int monthIndex = calendar.get(Calendar.MONTH);
// array to keep the orderen month names
String[] monthOrdered = new String[months.length];
// create a stream with indexes for one year start with current month
IntStream.range(monthIndex, monthIndex + 12)
.sequential()
// fill the ordered array
.forEach(i -> monthOrdered[i - monthIndex] = months[i % 12]);
System.out.println("monthOrdered = " + Arrays.toString(monthOrdered));
}
}
monthOrdered = [August, September, October, November, December, January, \
February, March, April, May, June, July]