問題タブ [guava]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Google コレクションのサプライヤーと検索
null を返さない一連の Suppliers の最初の結果を返す Google Collections メソッドを探しています。
Iterables.find() の使用を検討していましたが、Predicate ではサプライヤを呼び出して結果を null と比較し、find メソッドがサプライヤを返したら再度呼び出す必要があります。
java - Googleコレクションを使用してリストをフィルタリングおよびソートする
リスト(またはセット)があるとします:
「src」で始まる用語が最初、「assoc」が 2 番目、「dest」が最後である自然な順序で用語をソート/グループ化する ImmutableList(Set) を取得したいと思います。用語にそれらが含まれていない場合は、結果のリストから削除する必要があります。
したがって、ここでの結果は「srcB」、「srcT」、「assocX」、「destA」です。
Iterables.filter または Predicates の組み合わせでこれを実行できると思いますが、表示されません。私が思うにそれを行う簡潔な方法があるに違いありません。
編集:リストの代わりにセットも機能します。
java - 要素の一意性を保証するキュー?
キューのように動作するが、キューの各要素が一意であることを確認するjava.util.QueueまたはGoogleコレクション内の何かの実装を探しています。(それ以上挿入しても効果はありません)
それは可能ですか、それとも私は手でそれをしなければなりませんか?
今のところ、LinkedList実装のキューを使用しており、挿入する前に一意性を確認します。(これを行うためにサイドマップを使用します。キューの前後にサイドマップから要素を追加/削除します)。あまり好きではありません。
どんな入力でも大歓迎です。java.utilパッケージに含まれていない場合は、それは悪い考えですか?
java - Java で非常に反復的なコードとドキュメントを管理する
コードの繰り返しが多いことは一般的に悪いことであり、これを最小限に抑えるのに役立つ設計パターンがあります。ただし、言語自体の制約により、避けられない場合もあります。から次の例を取り上げますjava.util.Arrays
。
上記のスニペットは、ソース コードに 8 回表示されます。ドキュメンテーション/メソッド シグネチャのバリエーションはほとんどありませんが、メソッド本体はまったく同じでint[]
、short[]
ルート配列型、、、、、、、、およびchar[]
byte[]
boolean[]
double[]
float[]
Object[]
反省(それ自体はまったく別の主題です)に頼らない限り、この繰り返しは避けられないと私は信じています。ユーティリティ クラスとして、このように反復的な Java コードが非常に集中することは非常に非典型的であることは理解していますが、ベスト プラクティスを使用しても反復は発生します。リファクタリングは、常に可能であるとは限らないため、常に機能するとは限りません (明らかなケースは、繰り返しがドキュメントにある場合です)。
明らかに、このソース コードを維持することは悪夢です。ドキュメンテーションのわずかなタイプミス、または実装のマイナーなバグは、何回繰り返しても乗算されます。実際、最良の例はたまたまこの正確なクラスを含んでいます:
Google Research ブログ - おまけ、おまけ - すべてを読む: ほぼすべてのバイナリ検索とマージソートが壊れている (Joshua Bloch、ソフトウェア エンジニア)
このバグは驚くほど微妙なもので、単純で単純なアルゴリズムと多くの人が考えていたもので発生しています。
上記の行は、ソース コードで 11 回表示されます。
だから私の質問は:
- この種の反復的な Java コード/ドキュメントは、実際にはどのように処理されますか? それらはどのように開発、維持、およびテストされますか?
- 「オリジナル」から始めて、できるだけ成熟させてから、必要に応じてコピーして貼り付け、間違いがなかったことを願っていますか?
- 元のファイルで間違いを犯した場合は、コピーを削除して複製プロセス全体を繰り返すことに慣れていない限り、どこでも修正できますか?
- そして、これと同じプロセスをテスト コードにも適用しますか?
- Java は、この種の目的のために、使用が制限されたソース コードの前処理を行うことで利益を得るでしょうか?
- おそらく Sun は、この種の反復的なライブラリ コードの作成、保守、文書化、およびテストを支援する独自のプリプロセッサを持っているのでしょうか?
コメントで別の例が要求されたので、Google Collections からこれを取得しました: com.google.common.base.Predicates行 276-310 ( AndPredicate
) vs 行 312-346 ( OrPredicate
)。
これら 2 つのクラスのソースは、次の点を除いて同一です。
AndPredicate
vsOrPredicate
(それぞれがそのクラスに 5 回出現)"And("
vsOr("
(それぞれのtoString()
方法で)#and
vs#or
(@see
Javadoc コメント内)true
vsfalse
(inapply
;!
は式の外に書き直すことができます)-1 /* all bits on */
対0 /* all bits off */
中hashCode()
&=
対|=
中hashCode()
java - Google GuavaでInputStreamのInputSupplierを作成する簡潔な方法はありますか?
Google Guavaには、InputSuppliersを作成するためのファクトリメソッドがいくつかありますbyte[]
。
またはからFile
:
InputSupplier
与えられたものを作成する同様の方法はありInputStream
ますか?
つまり、匿名クラスよりも簡潔な方法です。
Files.copy(...)
背景:egまたは。でInputStreamsを使用したいと思いByteStreams.equal(...)
ます。
java - Google コレクションが Apache コレクションのように MultiKeyMap をサポートしないのはなぜですか?
SortedMultiSet
Google による決定は(stackoverflow question)の決定と似ていますか、それとも
使用されていないためですMultiKeyMap
か?
MultiKeyMap
クラスメンバーとして複数のキーを含むキーとしてカスタムクラスを使用することもできることを認識しています。逆に、 の get を呼び出すときに複数のキーを指定するという概念が気に入っていますMultiKeyMap
。
Apache のバージョンMultiKeyMap
は素晴らしいですが、Generics が非常に不足しているため、Google Collections を調べて最新の実装を探しました。Google がまだサポートしていない理由や、より良い代替手段がある場合は、返信してください。
java - Joiner はスレッドセーフですか?
google collections Joinerスレッドは安全ですか?
java - マルチセットからコレクションのオカレンスを削除する
Multiset には、removalAllOccuring(Collection) (または類似の) メソッドが必要なようです。remove(Object,int)およびremoveAll(Collection)に類似したものです。その方法を除いて、その意図を達成するための最良の方法は何ですか。デモ用に小さな JUnit ドライバーを作成しました。
出力:
私が欠落している場合、またはコレクションをループして削除するよりも別の/より良い方法があるかもしれないと考えています。また、削除するコレクションがList
java - Java で Google コレクションの BiMap をインスタンス化するには
Bimap
Google コレクションのインスタンスを作成するにはどうすればよいですか?
質問Java: Instantiate Google Collection's HashBiMapを読みました
私のコードのサンプル
私は得るcannot instantiate the type BiMap<String, Integer>
。