我正在寻找最简单的方法来创建一系列年份,我可以将这些年份放入列表中,从年份开始到结束年份结束。
示例
String fromYear = "2010"
String toYear = "2014"
期望创建年份列表["2010","2011","2012","2013","2014"]
不,我知道我需要将字符串转换为整数
Integer from = fromYear != null ? Integer.parseInt(fromYear) : null;
Integer to = toYear != null ? Integer.parseInt(toYear) : null;
从那里我失去了最有效的方式来完成这个。
答案 0 :(得分:3)
你不应该创建一个带字符串的特定函数,通常最好有一个范围函数,它使用Integer.parseInt
来填充和转换字符串,正如你在问题中所说的那样。
然后你可以定义自己的功能:
public static List<Integer> range(int from, int to) {
List<Integer> list = new ArrayList<Integer>();
for (int i = from; i <= to; ++i)
list.add(i);
return list;
}
否则,如果您使用的是Java 8,请查看IntStream.rangeClosed
。你也可以使用Guava的Range
,它们很好,因为使用迭代器,它们不必物理实例化列表。
答案 1 :(得分:3)
这就是使用新的Java 8流API的情况。我将假设没有任何用例,其中任何一年可能是null
,如果其中一个是:
String fromYear = "2010" ;
String toYear = "2014" ;
List<Integer> years =
IntStream.rangeClosed
(Integer.parseInt(Objects.requireNonNull(fromYear)),
Integer.parseInt(Objects.requireNonNull(toYear)))
.boxed()
.collect(Collectors.toList());
步骤大致对应于:确保fromYear
和toYear
都是非null
,否则会抛出异常;将fromYear
和toYear
转换为整数;创建以int
开头并以fromYear
结尾的toYear
值流;将它们转换为Integer
个实例(即boxed()
);并将它们打包成一个列表。
答案 2 :(得分:2)
接受String
个参数,转换并返回Integer
列表:
public static List<Integer> range(String startYear, String endYear) {
int cur = Integer.parseInt(startYear);
int stop = Integer.parseInt(endYear);
List<Integer> list = new ArrayList<Integer>();
while (cur <= stop) {
list.add(cur++);
}
return list;
}
或者如果您需要返回String
列表:
public static List<String> range(String startYear, String endYear) {
int cur = Integer.parseInt(startYear);
int stop = Integer.parseInt(endYear);
List<String> list = new ArrayList<String>();
while (cur <= stop) {
list.add(String.valueOf(cur++));
}
return list;
}
答案 3 :(得分:1)
将日期视为日期
String fromYear = "2010";
String toYear = "2014";
SimpleDateFormat df = new SimpleDateFormat("yyyy", Locale.ENGLISH);
List<String> listOfDates = new ArrayList();
Calendar startCal = Calendar.getInstance(Locale.ENGLISH);
startCal.setTime(df.parse(fromYear));
Calendar endCal = Calendar.getInstance(Locale.ENGLISH);
endCal.setTime(df.parse(toYear));
while (startCal.getTimeInMillis() <= endCal.getTimeInMillis()){
java.util.Date date = startCal.getTime();
listOfDates.add(new SimpleDateFormat("yyyy", Locale.ENGLISH).format(date).trim());
startCal.add(Calendar.YEAR, 1);
}
System.out.println(listOfDates);