Java でオブジェクトをグループ化する簡単な方法
出典: Dev.toこの例では、コレクションを値として含むMapオブジェクト のグループ化を簡略化する方法を学びます。 たとえば、キーが整数で値が文字列の配列である Mapオブジェクトがあります。Grouper<Integer, String> grouper = new ArrayListGrouper<>();
grouper.put(1, "a");
grouper.put(1, "b");
grouper.put(1, "c");
grouper.put(1, "c");
grouper.put(2, "c");
結果:
{1=[a、b、c、c]、2=[c]}
必要なのは、グループ化戦略を定義することだけです。たとえば、すでに定義されているArrayListGrouperクラスは、そのストラテジとしてArrayListを使用します。異なるGroupingStrategを使用する新しいGrouperをいつでも定義できます。次に、要素を一意にするために ArrayList をHashSetに変更しましょう。
public class HashSetGrouper<K, V> extends Grouper<K, V> {
public HashSetGrouper() {
super(HashSet::new);
}
}
次に、次のことをテストします。
@Test
public void testHashSetGrouper() {
Grouper<Integer, String> grouper = new HashSetGrouper<>();
grouper.put(1, "a");
grouper.put(1, "b");
grouper.put(1, "c");
grouper.put(1, "c");
grouper.put(2, "c");
System.out.println(grouper);
}
結果:
{1=[a, b, c], 2=[c]}
キー1には、値cが繰り返されないセットが含まれています。サンプルコードはGithub に投稿されています。
charAt() メソッド - Java での使用方法
出典: FreeCodeCamp Java のcharAt() メソッドは、指定されたインデックスにある文字列内のchar文字の値を返します。今日は、 charAt()メソッドの使用方法をその構文から見て、次にいくつかの例とユースケースを見ていきます。Java charAt() メソッドの使用方法
charAt()メソッドの構文は次のようになります。public char charAt(int index)
charAt()メソッド を使用して文字列から返される文字は、charデータ型であることに注意してください。これが戻り値の連結にどのような影響を与えるかをすぐに見てみましょう。次に例を見てみましょう。
public class Main {
public static void main(String[] args) {
String greetings = "Hello World";
System.out.println(greetings.charAt(0));
// H
}
}
上記のコードでは、greetingsという変数に格納されている文字列は「Hello World」と表示されています。charAt()メソッドを使用してインデックス 0 の文字を取得しました。その文字は文字 H です。最初の文字は常にインデックス 0 にあり、2 番目の文字はインデックス 1 になります。部分文字列間のスペースもインデックスとみなされます。次の例では、返されたさまざまな文字を接続しようとすると何が起こるかを示します。連結とは、2 つ以上の値を結合することを意味します (ほとんどの場合、この用語は文字列内の文字または部分文字列を接続するために使用されます)。
public class Main {
public static void main(String[] args) {
String greetings = "Hello World";
char ch1 = greetings.charAt(0); // H
char ch2 = greetings.charAt(4); // o
char ch3 = greetings.charAt(9); // l
char ch4 = greetings.charAt(10); // d
System.out.println(ch1 + ch2 + ch3 + ch4);
// 391
}
}
charAt()メソッド を使用して、インデックス 0、4、9、10 を持つ文字 (それぞれ H、o、l、d の文字) を取得しました。次に、これらの文字を出力して接続しようとしました。
System.out.println(ch1 + ch2 + ch3 + ch4);
ただし、「Hold」を返す代わりに、391 を取得しました。これは、戻り値が文字列ではなく、char型であるためです。したがって、それらを連結すると、インタプリタは代わりに ASCII 値を追加します。H の ASCII 値は 72、o の値は 111、l の値は 108、d の値は 100 です。これらを加算すると、最後の例で返された 391 が得られます。
エラー StringIndexOutOfBoundsException
文字列内の文字数よりも大きいシーケンス番号を渡すと、コンソールで StringIndexOutOfBoundsException エラーが発生します。このエラーは、Java ではサポートされていない負のインデックスの使用にも当てはまります。負のインデックス付けをサポートする Python などのプログラミング言語では、0 が常に最初の文字を返すのと同様に、-1 を渡すとデータ セット内の最後の文字または値が得られます。以下に例を示します。public class Main {
public static void main(String[] args) {
String greetings = "Hello World";
char ch1 = greetings.charAt(20);
System.out.println(ch1);
/* Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 20
*/
}
}
上記のコードでは、インデックス 20 を渡しています。これは、 greetings変数の文字数を超えているため、エラーが発生しました。上記のコード ブロックでコメントアウトされたエラー メッセージを確認できます。同様に、次のように負の値を渡す場合: char ch1 =greetings.charAt(-1); とすると、同様のエラーが表示されます。
GO TO FULL VERSION