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

A little shorter than virag's answer, as it skips asList() and doesn't do a string trim.

List<Long> list = Arrays.stream(str.split(",")).map(Long::valueOf).collect(Collectors.toList());
于 2018-05-10T21:54:03.433 に答える
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 に答える
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(",",""));

と、

if str1="[123,456,789]"

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