9

我有一个带有逗号分隔值的字符串,我从数据库中直接获取。现在我想将整个字符串传递给另一个查询,但所需的数据类型很长,我想使用 in 子句来完成这项工作。

str1 = [123,456,789];

有没有直接的方法来代替循环。

4

7 回答 7

10

您可以使用 Java 8 的 Lambda 函数来实现这一点,而无需循环

    String string = "1, 2, 3, 4";
    List<Long> list = Arrays.asList(string.split(",")).stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
于 2015-11-18T02:07:14.683 回答
6

番石榴

List<Long> longs = Lists.newArrayList(Iterables.transform(Splitter.on(',').split("1,2,3"), new Function<String, Long>() {
    public Long apply(final String in) {
        return in == null ? null : Longs.tryParse(in);
    }
}));

编辑:

使用List<String>( stringList) 作为输入:

List<Long> longs = Lists.newArrayList(Lists.transform(stringList, new Function<String, Long>() {
    public Long apply(final String in) {
        return in == null ? null : Longs.tryParse(in);
    }
}));
于 2013-11-13T06:40:55.073 回答
6

比 virag 的答案短一点,因为它跳过 asList() 并且不进行字符串修剪。

List<Long> list = Arrays.stream(str.split(",")).map(Long::valueOf).collect(Collectors.toList());
于 2018-05-10T21:54:03.433 回答
2

我怀疑你可以在不循环的情况下做到这一点。这是一个示例解决方法:

String str = "[123,456,789]";


Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(str);

List<Long> list = new ArrayList<Long>();

 while (matcher.find()) {
System.out.println(matcher.group());
list.add(Long.parseLong(matcher.group())); // Add the value to the list
}
System.out.println(list);
于 2013-11-13T06:41:09.520 回答
2

使用 StringTokenizer 并将拆分标记添加到带有 while 循环的列表中。

StringTokenizer st = new StringTokenizer("1,2,3", ",");
List<Long> list = new ArrayList<Long>();
while (st.hasMoreTokens()) 
{
     list.add(Long.valueOf(st.nextToken()));
}
于 2013-11-13T06:58:07.833 回答
0

您可以尝试以下代码从字符串中获取长值

如果 str1="123,456,789"

 Long x=Long.parseLong(str1.replace(",",""));

和,

如果 str1="[123,456,789]"

Long x=Long.parseLong(str1.replace(",|\\[|\\]",""));
于 2013-11-13T06:39:30.130 回答
0

使用 String.replace 假设 str1 包含“[123,123,123]”

str1 = str1.replace(",|\\[|\\]",""); //should replace commas and brackets with nothing;

那么你应该能够做到

Long myLong =  Long.parseLong(str1);
于 2013-11-13T06:43:06.290 回答