String配列をLong配列またはListに分解したいと考えています。 私はループを使いたくありません。JAVAでループのないLongのリストまたはLongのリストに文字列を分解する
これを行うJavaメソッドはありますか。あなたは今long
値の数がString
に含まれている場合を除き
String配列をLong配列またはListに分解したいと考えています。 私はループを使いたくありません。JAVAでループのないLongのリストまたはLongのリストに文字列を分解する
これを行うJavaメソッドはありますか。あなたは今long
値の数がString
に含まれている場合を除き
String[]
(数字列)を「long[]
」に「変換する」O(1)操作はありません。ループが表示されているか、または第三者の方法で隠れている場合は、常にO(n)になります。
あなたはループを「見る」したくない場合は、単にメソッドに
Long[] pseudoOneStepConversion(numbers);
を実装し、我々はあまりにも再帰的にそれを行うことができます
privat Long[] pseudoOneStepConversion(String[] numbers) {
Long[] result = new long[numbers.length];
for (int i = 0; i < numbers.length; i++)
result[i] = Long.parseLong(numbers[i]);
return result;
}
を実装する - それはまだありますO(n)、パフォーマンスが低下し、ループのように見えない:
public static void main(String[] args) {
List<Long> target = new ArrayList<Long>();
copy(new String[]{"1", "2", "3"}, target, 0);
System.out.println(target);
}
private static void copy(String[] source, List<Long> target, int index) {
if (index == source.length)
return;
target.add(Long.parseLong(source[index]));
copy(source, target, index+1);
}
私は再帰例えばdownvotesを取得を開始するので -
注: - ;あなたがコーディングを避けることができ3rd party librariesの少しの助けを借りて)
これは時間の複雑さについてではなく、コードの簡潔さについて考えています。私が読んでいるように、OPには関数型プログラミングの 'map'のようなものが必要です(私はGuavaがそういうものを持っていると思います)。 –
JavaでUnforunately、ループはこれらのケースの多くで最も簡潔に/読み取り可能な形式です。おそらく、クロージャはJava 8でこれを変更します。 –
投票が減少します。なぜなら、再帰はJavaでははるかに悪いプレーンループを実行するからです。 JVM JITコンパイラのターゲット・ループには最適化がありますが、現時点ではLispや他のいくつかのVMとは異なり、JVMでの末尾再帰の最適化はありません。 –
なしループせずにこれを実行する方法は、(あなたが明示的にループをコーディングしていない場合でも、あなたが呼び出すメソッドは、いずれかを使用します)が存在しないとList
に手動で追加してください。
もちろん、テールの再帰があります。それがプロセッサレベルになると、*すべての制御構造はgoto *です。また、ヘルパー関数がループを使用する場合、反復反復でコードを書き直す必要がない限り、OPの問題ではないと私は考えています。 –
をそれは純粋に学術および製品コードで使用するためにintededではないことが明らかになった、と思いましたあなた自身のコードでループしますが、フードのどこかにループが存在します。たとえば:
List<String> stringList = Arrays.asList(stringArray);
List<Long> longList = Lists.transform(stringList, new Function<String, Long>() {
public Long apply(String s) {
return Long.valueOf(s);
}
});
あなたの最善の選択肢はGuavas Lists.transformです。
String[] stringArray = {"1999", "20000"};
List<String> stringList = Arrays.asList(stringArray);
List<Long> longList = Lists.transform(stringList,
new Function<String, Long>() {
Long apply(String value) {
return Long.valueOf(value);
}
});
注:Guavaはもちろんこれを実現するためにループを実行する必要がありますが、コードにループはありません。
「公然」がなければ、それは驚くほどユージーンの答えに似ています... –
LOL :-)いいえ私はそれをコピーしませんでした – Zapodot
グアバ(Guava)ライブラリで簡略化されたユージーン解答。 Guava 16.0以降。
List<Long> longList = Lists.transform(Arrays.asList(stringArray), Longs.stringConverter());
したがって、配列には 'long'sの文字列表現が含まれていますか?もっと具体的にする必要がありますし、あなたはそれをあなた自身で解決しようとしています。 –
[this](http://stackoverflow.com/questions/9993916/decompose-a-string-into-array-of-int-without-loop-java)の質問が最近尋ねられました。 – darrengorman
@milkplusvellocet:いいえ、もう一つの質問は、文字列をintの配列に解析することです。この質問は、 "変換"部分を定義することなく、文字列配列をLong配列に "変換"することです。 –