データベースから直接取得しているカンマ区切りの値を持つ文字列があります。今、その文字列全体を別のクエリに渡したいのですが、必要なデータ型が長く、これを行うために in 句を使用したいと考えています。
str1 = [123,456,789];
ループする代わりにそれを行う直接的な方法はありますか。
データベースから直接取得しているカンマ区切りの値を持つ文字列があります。今、その文字列全体を別のクエリに渡したいのですが、必要なデータ型が長く、これを行うために in 句を使用したいと考えています。
str1 = [123,456,789];
ループする代わりにそれを行う直接的な方法はありますか。
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());
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());
グアバで:
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);
}
}));
StringTokenizer を使用し、while ループで分割トークンをリストに追加します。
StringTokenizer st = new StringTokenizer("1,2,3", ",");
List<Long> list = new ArrayList<Long>();
while (st.hasMoreTokens())
{
list.add(Long.valueOf(st.nextToken()));
}
以下のコードを試して、文字列から長い値を取得できます
str1="123,456,789" の場合
Long x=Long.parseLong(str1.replace(",",""));
と、
if str1="[123,456,789]"
Long x=Long.parseLong(str1.replace(",|\\[|\\]",""));