タグ付けされた質問 「collections」

コレクションAPIは、オブジェクトのコレクションの処理を容易にする一連のクラスとインターフェースを開発者に提供します。


9
PythonユニットテストのassertAlmostEqual-floatのコレクションのテスト
PythonのユニットテストフレームワークのassertAlmostEqual(x、y)メソッドは、とが浮動小数点数であると仮定してほぼ等しいかどうかをテストします。xy の問題assertAlmostEqual()は、フロートでのみ機能することです。assertAlmostEqual()フロートのリスト、フロートのセット、フロートの辞書、フロートのタプル、フロートのタプルのリスト、フロートのリストのセットなどで機能するような方法を探しています。 たとえば、みましょうx = 0.1234567890、y = 0.1234567891。xそしてy、彼らは最後のものを除き、それぞれ、すべての桁に同意するので、ほぼ等しくなっています。したがってself.assertAlmostEqual(x, y)あるTrueので、assertAlmostEqual()フロートのための作品。 assertAlmostEquals()次の呼び出しも評価する、より一般的なものを探していますTrue。 self.assertAlmostEqual_generic([x, x, x], [y, y, y])。 self.assertAlmostEqual_generic({1: x, 2: x, 3: x}, {1: y, 2: y, 3: y})。 self.assertAlmostEqual_generic([(x,x)], [(y,y)])。 そのような方法はありますか、それとも自分で実装する必要がありますか? 明確化: assertAlmostEquals()名前付きのオプションのパラメータがplacesあり、小数点以下の桁数に丸められた差を計算することによって数値が比較されますplaces。デフォルトではplaces=7、したがって、self.assertAlmostEqual(0.5, 0.4)はFalseですが、self.assertAlmostEqual(0.12345678, 0.12345679)はTrueです。私の投機assertAlmostEqual_generic()は同じ機能を持っているはずです。 2つのリストがまったく同じ順序でほぼ等しい数である場合、それらはほぼ等しいと見なされます。正式には、for i in range(n): self.assertAlmostEqual(list1[i], list2[i])。 同様に、2つのセットは、(各セットに順序を割り当てることによって)ほぼ等しいリストに変換できる場合、ほぼ等しいと見なされます。 同様に、各辞書のキーセットが他の辞書のキーセットとほぼ等しい場合、2つの辞書はほぼ等しいと見なされ、そのようなほぼ等しいキーペアごとに、対応するほぼ等しい値があります。 一般的に:2つのコレクションは、互いにほぼ等しい対応するフロートを除いて、等しい場合はほぼ等しいと見なします。言い換えれば、私は実際にオブジェクトを比較したいのですが、途中でフロートを比較するときは精度が低く(カスタマイズされています)。

17
文字列コレクションを検索する最速の方法
問題: 約120,000ユーザー(文字列)のテキストファイルがあり、コレクションに保存して、後でそのコレクションを検索します。 検索方法は、ユーザーがaのテキストを変更するたびに発生TextBoxし、結果はのテキストを含む文字列になりますTextBox。 リストを変更する必要はありませんListBox。結果をプルして、に配置するだけです。 私がこれまでに試したこと: 2つの異なるコレクション/コンテナを試してみました。これらは外部テキストファイルから文字列エントリをダンプしています(もちろん1回)。 List<string> allUsers; HashSet<string> allUsers; 次のLINQクエリを使用します。 allUsers.Where(item => item.Contains(textBox_search.Text)).ToList(); 私の検索イベント(ユーザーが検索テキストを変更すると発生します): private void textBox_search_TextChanged(object sender, EventArgs e) { if (textBox_search.Text.Length > 2) { listBox_choices.DataSource = allUsers.Where(item => item.Contains(textBox_search.Text)).ToList(); } else { listBox_choices.DataSource = null; } } 結果: どちらも応答時間が遅くなりました(各キーを押す間隔は約1〜3秒)。 質問: 私のボトルネックはどこにあると思いますか?私が使ったコレクションは?検索方法は?どちらも? どうすればより良いパフォーマンスとより流暢な機能を得ることができますか?

4
HashMapの値を反復してコピーする効率的な方法
変換したい: Map<String, Map<String, List<Map<String, String>>>> inputMap に: Map<String, Map<String, CustomObject>> customMap inputMap構成で提供され、準備ができていますが、customMapフォーマットする必要があります。CustomObjectはList<Map<String, String>>、関数で数行のコードを使用することから派生します。 入力マップを反復し、customMapでキー値をコピーする通常の方法を試しました。Java 8または他のショートカットを使用してそれを行う効率的な方法はありますか? Map<String, Map<String, List<Map<String, String>>>> configuredMap = new HashMap<>(); Map<String, Map<String, CustomObj>> finalMap = new HashMap<>(); for (Map.Entry<String, Map<String, List<Map<String, String>>>> attributeEntry : configuredMap.entrySet()) { Map<String, CustomObj> innerMap = new HashMap<>(); for (Map.Entry<String, List<Map<String, String>>> valueEntry …

2
コレクションを安全にコピーするにはどうすればよいですか?
以前は、コレクションを安全にコピーすると次のようなことをするように言っていました。 public static void doThing(List<String> strs) { List<String> newStrs = new ArrayList<>(strs); または public static void doThing(NavigableSet<String> strs) { NavigableSet<String> newStrs = new TreeSet<>(strs); しかし、これらの「コピー」コンストラクター、同様の静的作成メソッドおよびストリームは本当に安全で、ルールはどこに指定されていますか?安全とは、Java言語によって提供される基本的なセマンティック整合性の保証と、悪意のある呼び出し元に対して適用されるコレクションSecurityManagerであり、妥当な手段でバックアップされ、欠陥がないことを前提としています。 私はこの方法を投げると幸せConcurrentModificationException、NullPointerException、IllegalArgumentException、ClassCastException、など、またはおそらくハング。 String不変の型引数の例として選択しました。この質問については、私は独自の落とし穴を持つ変更可能な型のコレクションのディープコピーには興味がありません。 (明確にするために、私はOpenJDKのソースコードを見て、とに対して何らかの回答をArrayListしましたTreeSet。)

2
EnumMapがJavaのSortedMapではないのはなぜですか?
EnumMap<K extends Enum<K>, V> Javadocでも確認できるように、Javaでは関連する列挙型の定義によって明確に順序付けられています。 列挙型マップは、キーの自然な順序(列挙型定数が宣言されている順序)で維持されます。これは、コレクションビュー(によって返されるイテレータに反映されkeySet()、entrySet()およびvalues())。 必要なのは、SortedMapキータイプとして列挙型を使用することです。headMap()またはのようなメソッドを使用したいがfirstKey()、EnumMapsの追加されたcpu + memoryパフォーマンスから利益を得たい。TreeMapここであまりにも多くのオーバーヘッドのように聞こえます。 質問:これは実装で見落とされただけでしたか、それとも(から派生したAbstractMap)怠惰EnumMapでしたSortedMapか、それともなぜではないのですか?

4
List of Employees with Java streamから、特定の日付の前後の従業員を取得します。
参加日が異なるs がListありEmployeeます。ストリームを使用してリストから参加する特定の日付の前後に従業員を取得したい。 私は次のコードを試しました、 List<Employee> employeeListAfter = employeeList.stream() .filter(e -> e.joiningDate.isAfter(specificDate)) .collect(Collectors.toList()); List<Employee> employeeListBefore = employeeList.stream() .filter(e -> e.joiningDate.isBefore(specificDate)) .collect(Collectors.toList()); class Employee{ int id; String name; LocalDate joiningDate; } これを単一のストリームで行う方法はありますか?

3
Java 8 Streamsを使用してリストが空の場合、デフォルトのリストを返しますか?
以下がストリーム操作の1つのセットとして実行できるようにする方法はありますか?recommendedProductsが空であるかどうかを明示的にチェックせずにデフォルトのリストを返すか、またはフィルターされたリストを返しますか? public List<Product> getRecommendedProducts() { List<Product> recommendedProducts = this.newProducts .stream() .filter(isAvailable) .collect(Collectors.toList()); if (recommendedProducts.isEmpty()) { return DEFAULT_PRODUCTS; } return recommededProducts; }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.