如何在Java中打印出List的所有元素?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java中打印出List的所有元素?相关的知识,希望对你有一定的参考价值。
我试图打印出List
的所有元素,但是它打印的是Object
的指针而不是值。
这是我的打印代码......
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
谁能帮助我,为什么它不打印元素的价值。
这是一个关于打印列表组件的示例:
public class ListExample {
public static void main(String[] args) {
List<Model> models = new ArrayList<>();
// TODO: First create your model and add to models ArrayList, to prevent NullPointerException for trying this example
// Print the name from the list....
for(Model model : models) {
System.out.println(model.getName());
}
// Or like this...
for(int i = 0; i < models.size(); i++) {
System.out.println(models.get(i).getName());
}
}
}
class Model {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- 您没有指定列表包含哪些元素,如果它是primitive data type,那么您可以打印出元素。
- 但是如果元素是对象,那么就像Kshitij Mehta所提到的那样,你需要在该对象中实现(覆盖)方法“toString” - 如果它尚未实现 - 并让它从对象中返回一些意义为完整的东西,例如:
class Person { private String firstName; private String lastName; @Override public String toString() { return this.firstName + " " + this.lastName; } }
我遇到过类似的问题。我的代码:
List<Integer> leaveDatesList = new ArrayList<>();
.....inserted value in list.......
方法1:在for循环中打印列表
for(int i=0;i<leaveDatesList.size();i++){
System.out.println(leaveDatesList.get(i));
}
方式2:在forEach中打印列表,for循环
for(Integer leave : leaveDatesList){
System.out.println(leave);
}
方式3:在java 8中打印列表
leaveDatesList.forEach(System.out::println);
我编写了一个转储函数,它基本上打印出一个对象的公共成员,如果它没有覆盖toString()。人们可以很容易地将其扩展为呼叫吸气剂。的Javadoc:
使用以下规则将给定对象转储到System.out:
- 如果Object是Iterable,则转储其所有组件。
- 如果Object或其中一个超类重写toString(),则转储“toString”
- 否则,为Object的所有公共成员递归调用该方法
/**
* Dumps an given Object to System.out, using the following rules:<br>
* <ul>
* <li> If the Object is {@link Iterable}, all of its components are dumped.</li>
* <li> If the Object or one of its superclasses overrides {@link #toString()}, the "toString" is dumped</li>
* <li> Else the method is called recursively for all public members of the Object </li>
* </ul>
* @param input
* @throws Exception
*/
public static void dump(Object input) throws Exception{
dump(input, 0);
}
private static void dump(Object input, int depth) throws Exception{
if(input==null){
System.out.print("null
"+indent(depth));
return;
}
Class<? extends Object> clazz = input.getClass();
System.out.print(clazz.getSimpleName()+" ");
if(input instanceof Iterable<?>){
for(Object o: ((Iterable<?>)input)){
System.out.print("
"+indent(depth+1));
dump(o, depth+1);
}
}else if(clazz.getMethod("toString").getDeclaringClass().equals(Object.class)){
Field[] fields = clazz.getFields();
if(fields.length == 0){
System.out.print(input+"
"+indent(depth));
}
System.out.print("
"+indent(depth+1));
for(Field field: fields){
Object o = field.get(input);
String s = "|- "+field.getName()+": ";
System.out.print(s);
dump(o, depth+1);
}
}else{
System.out.print(input+"
"+indent(depth));
}
}
private static String indent(int depth) {
StringBuilder sb = new StringBuilder();
for(int i=0; i<depth; i++)
sb.append(" ");
return sb.toString();
}
System.out.println(list);
为我工作。
这是一个完整的例子:
import java.util.List;
import java.util.ArrayList;
public class HelloWorld {
public static void main(String[] args) {
final List<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
System.out.println(list);
}
}
它将打印[Hello, World]
。
list.stream().map(x -> x.getName()).forEach(System.out::println);
对于String数组的列表
list.forEach(s -> System.out.println(Arrays.toString((String[]) s )));
我现在碰巧正在研究这个......
List<Integer> a = Arrays.asList(1, 2, 3);
List<Integer> b = Arrays.asList(3, 4);
List<int[]> pairs = a.stream()
.flatMap(x -> b.stream().map(y -> new int[]{x, y}))
.collect(Collectors.toList());
Consumer<int[]> pretty = xs -> System.out.printf("
(%d,%d)", xs[0], xs[1]);
pairs.forEach(pretty);
For循环打印列表的内容:
List<String> myList = new ArrayList<String>();
myList.add("AA");
myList.add("BB");
for ( String elem : myList ) {
System.out.println("Element : "+elem);
}
结果:
Element : AA
Element : BB
如果您想要在一行中打印(仅供参考):
String strList = String.join(", ", myList);
System.out.println("Elements : "+strList);
结果:
Elements : AA, BB
尝试覆盖toString()方法,因为您希望元素将是printend。所以打印的方法可以是这样的:
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).toString());
}
public static void main(String[] args) {
answer(10,60);
}
public static void answer(int m,int k){
AtomicInteger n = new AtomicInteger(m);
Stream<Integer> stream = Stream.generate(() -> n.incrementAndGet()).limit(k);
System.out.println(Arrays.toString(stream.toArray()));
}
以下是紧凑的,并避免示例代码中的循环(并给你很好的逗号):
System.out.println(Arrays.toString(list.toArray()));
但是,正如其他人所指出的那样,如果您没有为列表中的对象实现合理的toString()方法,您将获得您正在观察的对象指针(实际上是哈希码)。无论他们是否在列表中,都是如此。
List<String> textList= messageList.stream()
.map(Message::getText)
.collect(Collectors.toList());
textList.stream().forEach(System.out::println);
public class Message {
String name;
String text;
public Message(String name, String text) {
this.name = name;
this.text = text;
}
public String getName() {
return name;
}
public String getText() {
return text;
}
}
从Java 8开始,List继承了一个默认的“forEach”方法,你可以将它与方法引用“System.out :: println”结合起来,如下所示:
list.forEach(System.out::println);
System.out.println(list);//toString() is easy and good enough for debugging.
toString()
的AbstractCollection
干净,容易做到这一点。 AbstractList
是AbstractCollection
的子类,因此不需要for循环,也不需要toArray()。
给定一段Java 代码如下:要打印出list中存储的内容,以下语句正确的是()。(选择二项)
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情