Addressオブジェクトを含むArrayListがあります。
このArrayListの値を印刷するにはどうすればよいですか。つまり、配列の内容(この場合は数字)を印刷します。
私はそれがこのコードで配列の実際のメモリアドレスをプリントアウトするためにそれを得ることができるだけです:
for(int i = 0; i < houseAddress.size(); i++) {
System.out.print(houseAddress.get(i));
}
Arrays.toString(list.toArray())
address
クラスにtoString()
メソッドを追加してください。
System.out.println(Arrays.toString(houseAddress));
私が理解していることから、あなたは配列のArrayListを印刷しようとしていて、それを表示する唯一の方法は
System.out.println(Arrays.deepToString(list.toArray()));
あなたはtoString()
メソッドのためのカスタム実装を提供していないので、それはそのオブジェクトのためにメモリのアドレスをプリントしようとしているデフォルトを呼び出します
solutionあなたのAddressクラスでこのようにtoString()
メソッドをオーバーライドします
public class Address {
int addressNo ;
....
....
...
protected String toString(){
return Integer.toString(addressNo);
}
今電話するとき
houseAddress.get(i) in the `System.out.print()` method like this
Address
オブジェクトのSystem.out.print( houseAddress.get(i) )
toString()
が呼び出されます
あなたはそのような数字のリストを持っていると思います
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
一覧を印刷する場合
//method 1
// Conventional way of printing arraylist
for (int number : numbers) {
System.out.print(number);
}
//method 2
// Lambda Expression to print arraylist
numbers.forEach((Integer value) -> System.out.print(value));
//method 3
// Lambda Expression to print arraylist
numbers.forEach(value -> System.out.print(value));
//method 4
// Lambda Expression (method reference) to print arraylist
numbers.forEach(System.out::print);
ArrayList
は配列のアドレスを格納していると言っていますか?それはtoString
呼び出しから返されるものなのか、それとも実際に格納しているものなのか?
ArrayList
の配列がある場合(例:.
int[] arr = {1, 2, 3};
houseAddress.add(arr);
それから配列値を表示するためにあなたはArrays.deepToString
を呼び出す必要があります:
for (int i = 0; i < houseAddress.size(); i++) {
System.out.println(Arrays.deepToString(houseAddress.get(i)));
}
あなたは単純にそれを与えることができます:
System.out.println("Address:" +houseAddress);
出力は[address1, address2, address3]
のようになります。
これは、ArrayListクラスまたはそのスーパークラスがtoString()関数をオーバーライドしているためです。
お役に立てれば。
public void printList(ArrayList<Address> list){
for(Address elem : list){
System.out.println(elem+" ");
}
}
Java 8以降、IterableインターフェースからforEach()メソッドを使用できます。
これはデフォルトの方法です。引数として、それは機能的なインターフェースを実装するクラスのオブジェクトを取りますConsumer。次の3つの方法で、Consumerをローカルに実装できます。
あり匿名クラス:
houseAddress.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
ラムダ式:
houseAddress.forEach(s -> System.out.println(s));
またはメソッド参照:を使って
houseAddress.forEach(System.out::print);
この印刷方法はIterableインターフェースのすべての実装に有効です。
これらはすべて、要素をどのように印刷するかを定義する方法を提供します。一方、toString()は、リストを1つの形式で印刷します。
HouseAddress.get(i)を角かっこで囲み、.toString()関数を呼び出します。すなわち、以下を参照してください。
for(int i = 0; i < houseAddress.size(); i++) {System.out.print((houseAddress.get(i)).toString());
}
住所の概念を理解したかどうかはわかりませんが(ここではhouseAddressを想定しています)、ArrayListを印刷する方法を探しているのであれば、ここでは次のようにします。
System.out.println(houseAddress.toString().replaceAll("\\[\\]", ""));
あなたはイテレータを使うことができます。ここでやるのが最も単純で最も物議をかもしないことです。 houseAddress
にデータ型String
の値があるとします。
Iterator<String> iterator = houseAddress.iterator();
while (iterator.hasNext()) {
out.println(iterator.next());
}
注:私が別の回答で述べたように、これには拡張forループを使用することもできます。
これは私を助けました:
System.out.println(Arrays.toString(codeLangArray.toArray()));
拡張forループやイテレータを使うこともできます。
for (String name : houseAddress) {
out.println(name);
}
HouseAddressというデータ型に変更することができ、不要な変換を回避できます。
コメントとして@Override public String toString()を作成した場合も、結果は同じになります。あなたがあなたのtoString()メソッドを実装すれば、それはうまくいくでしょう。
パブリッククラスPrintingComplexArrayList {
public static void main(String[] args) {
List houseAddress = new ArrayList();
insertAddress(houseAddress);
printMe1(houseAddress);
printMe2(houseAddress);
}
private static void insertAddress(List address)
{
address.add(new Address(1));
address.add(new Address(2));
address.add(new Address(3));
address.add(new Address(4));
}
private static void printMe1(List address)
{
for (int i=0; i<address.size(); i++)
System.out.println(address.get(i));
}
private static void printMe2(List address)
{
System.out.println(address);
}
}
クラスAddress {private int addr; public Address(int i){addr = i;} }
@Override public String toString()
{
Integer iAddr = new Integer (addr);
return iAddr.toString();
}
}
単に要素をコンソールに印刷したい場合は、印刷フォーマットを使用できます。
for(int i = 0; i < houseAddress.size(); i++) {
System.out.printf("%s", houseAddress.get(i));
}
House住所クラスにゲッターがあることを確認してから、次のコマンドを使用してください。
for(int i = 0; i < houseAddress.size(); i++) {
System.out.print(houseAddress.get(i)**.getAddress()**);
}