【问题标题】:Filter Java list and create integer constants array过滤 Java 列表并创建整数常量数组
【发布时间】:2016-09-18 01:15:47
【问题描述】:

我有一个Java list of Strings,如下:

我的列表:

C26366
C10025, C10026
C10244
C26595
C26594
C9026, C9027, C9029, C9080 //this is one list element (needs seperation)
C26597
C10223, C10287, C10277, C10215
C10242
C10243 
C9025, C9030, C9034, C9051, C9052, C9055 // similarly here
C10241
C10067
C27557
C10066
.... //these are all ids

上面是下面for-loopsn-p的输出:

for (String id: myList) {
      System.out.println(id);   
}

如何将此 myList 转换为 Java 整数数组?我期待类似/我想将该数组用作:

public static final IDS = { 31598,9089,9092,9093,9108,9109,....}

IDS array 必须包含来自myList 的内容,并且其中没有任何C's,也没有其他字符,只有数字。

【问题讨论】:

  • 查看String.split()String.trim()String.substring() 方法。将通过在, 上拆分以在一行上分隔 ID、修剪空格和子字符串以删除 C 字符来帮助解决您的问题。字符串 JavaDoc 可用here

标签: java arrays string list int


【解决方案1】:

在 Java 8 中,您可以使用流:

List<String> myList = Arrays.asList(
        "C26366", "C10025, C10026", "C10244", "C26595", "C26594",
        "C9026, C9027, C9029, C9080", "C26597", "C10223, C10287, C10277, C10215", 
        "C10242", "C10243",
        "C9025, C9030, C9034, C9051, C9052, C9055", "C10241", "C10067");

List<Integer> myListOfIntegers = myList.stream()
        .map(x -> x.split(","))
        .flatMap(l -> Arrays.asList(l).stream())
        .map(y -> y.replaceAll("\\D", ""))
        .map(z->Integer.parseInt(z))
        .collect(Collectors.toList());

for( Integer i : myListOfIntegers ){
    System.out.println(i);
}

结果是:

26366
10025
10026
10244
26595
26594
9026
9027
9029
9080
26597
10223
10287
10277
10215
10242
10243
9025
9030
9034
9051
9052
9055
10241
10067

【讨论】:

  • 希望我可以使用 Java 8,但仍然使用 Java 7。我会牢记这个 stream()。
【解决方案2】:

我建议这样做:

  1. 为最终值定义整数列表
  2. 然后将正则表达式与此模式“\d+”一起使用,在字符串列表中仅查找数字内容
  3. 如果找到,将其解析为整数并将其添加到列表中。

示例:

List<Integer> myListIntegers = new ArrayList<Integer>();
for (String subStrings : myList) {
    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher(subStrings);
    while (m.find()) {
        myListIntegers.add(Integer.parseInt(m.group()));
    }
}
System.out.println(myListIntegers);

此代码将打印包含您在 myList

中的 insteger 的列表

[26366, 10025, 10026, 10244, 26595, 26594, 9026, 9027, 9029, 9080, 10241、10067、27557、10066]

【讨论】:

  • 工作 - 得到所需的列表。我可以从这里开始。
猜你喜欢
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2023-03-19
  • 2015-03-29
  • 2013-05-01
  • 2020-10-15
  • 2015-10-23
相关资源
最近更新 更多