Java 创建从开始到结束的年数范围。

Java 创建从开始到结束的年数范围。,java,Java,我正在寻找一种最简单的方法来创建一系列年份,我可以将这些年份放入一个列表中,从起始年份开始,到结束年份结束 范例 String fromYear = "2010" String toYear = "2014" 希望创建一份年份列表[“2010”、“2011”、“2012”、“2013”、“2014”] 不,我知道我需要把字符串转换成整数 Integer from = fromYear != null ? Integer.parseInt(fromYear) : null; Integer to

我正在寻找一种最简单的方法来创建一系列年份,我可以将这些年份放入一个列表中,从起始年份开始,到结束年份结束

范例

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;

从那以后,我就不知道如何最有效地完成这项工作了

您不应该创建这样一个接受字符串的特定函数,通常最好有一个接受int的range函数,并使用
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;
}
公共静态列表范围(int-from,int-to){
列表=新的ArrayList();

对于(int i=from;i接受
String
参数,转换并返回
整数
列表:

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;
}
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;
}
将日期视为日期

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);
String fromYear=“2010”;
字符串toYear=“2014”;
SimpleDataFormat df=新的SimpleDataFormat(“yyy”,Locale.ENGLISH);
List listOfDates=新的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()这是新的Java 8 streams 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());
String fromYear=“2010”;
字符串toYear=“2014”;
列出年份=
IntStream.rangeClosed
(Integer.parseInt(Objects.requirennull(fromYear)),
Integer.parseInt(Objects.requirennull(toYear)))
.boxed()
.collect(Collectors.toList());

步骤大致对应于:确保
fromYear
toYear
均为非
null
,否则抛出异常;将
fromYear
toYear
转换为整数;创建一个
int
值流,以
fromYear
开始,以
toYear
结束;将它们转换为
>整数
实例(即
装箱()
);并将它们打包为一个列表。

计数将是一个很好的开始。你是否在考虑循环和递增,直到你到达今年?是的,这与输出从0到10的数字没有什么不同。你的开始和结束条件只是不同。我从来没有想过循环,我一直在想我会做的事情必须减去年份,然后找出两者之间的关系。我迫不及待地想尝试java 8谢谢你的帮助。Integer.parseInt()引发的NumberFormatException呢?@HunterMcMillen怎么办?如果你遇到了这个异常,那么你没有遵循指导原则