在不同的数组中过滤Arraylist

rem*_*oys 3 java android arraylist

我想将单个数组过滤成部分.假设我有一个ArrayList字符串:

 Array1  = ["2015-01-06","2015-04-06",
    "2016-06-06","2016-01-06",
    "2016-05-06","2017-02-06",
    "2017-04-06","2017-03-06",
    "2015-03-06","2016-04-06",
    "2016-02-06","2015-05-06",
    "2015-01-06","2016-06-06"]
Run Code Online (Sandbox Code Playgroud)

我希望它根据它们的年份过滤新数组,以便输出看起来像:

arrayA = ["2015-01-06","2015-04-06","2015-03-06","2015-05-06","2015-01-06"]
arrayB = ["2016-06-06","2016-01-06","2016-05-06","2016-04-06","2016-02-06","2016-06-06"]
arrayC = [""2017-02-06","2017-04-06","2017-03-06""]
Run Code Online (Sandbox Code Playgroud)

阵列基于多年.我不知道完成这项任务的正确方法.

Tun*_*aki 10

这个问题被编辑为包含Android标签,因为Android不支持Java 8,因此不适用于OP,我会留下它,以防它有人帮助不使用Android的人.


使用Stream API,您可以轻松构建Map<Integer, List<String>>每个键一年的位置.您可以使用groupingBy(classifier)分类器从日期中提取年份的位置.在这种情况下,日期将被解析,LocalDate.parse但您可以通过提供自己的格式化程序轻松扩展它.

public static void main(String[] args) {
    String[] array = {"2015-01-06","2015-04-06",
                      "2016-06-06","2016-01-06",
                      "2016-05-06","2017-02-06",
                      "2017-04-06","2017-03-06",
                      "2015-03-06","2016-04-06",
                      "2016-02-06","2015-05-06",
                      "2015-01-06","2016-06-06"};

    Map<Integer, List<String>> map =
        Arrays.stream(array)
              .collect(Collectors.groupingBy(s -> LocalDate.parse(s).getYear()));
              // or a simple s -> Integer.valueOf(s.substring(0, s.indexOf('-'))) in this case
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以从该地图访问所需的列表.

  • @remyboys Android不支持Java 8,是的,它不起作用.你应该从一开始就添加了android标签.我编辑反映了这一点. (2认同)