Java:在链表中选择多个元素

Java:在链表中选择多个元素,java,list,linked-list,listiterator,Java,List,Linked List,Listiterator,我有一个类的链表,其中包含3个字符串和一个double。我想收集列表中每个双精度的总值。比如说 LinkedList<Person> L = new LinkedList<Person>(); Person p1 = new Person("Fee","Foo","Bar", 1.2); Person p2 = new Person("Fi","Fi","Fo", 2.5); L.add(p1); L.add(p2); LinkedList L=新建Linke

我有一个类的链表,其中包含3个字符串和一个double。我想收集列表中每个双精度的总值。比如说

 LinkedList<Person> L = new LinkedList<Person>();
 Person p1 = new Person("Fee","Foo","Bar", 1.2);
 Person p2 = new Person("Fi","Fi","Fo", 2.5);
 L.add(p1);
 L.add(p2);
LinkedList L=新建LinkedList();
人员p1=新人员(“费用”、“Foo”、“酒吧”,1.2);
人员p2=新人员(“Fi”、“Fi”、“Fo”,2.5);
L.添加(p1);
L.添加(p2);

我想找出1.2和2.5,然后加起来。我假设我应该使用ListIterator,但我如何告诉它将找到的每个双精度值添加到总数中?

您可以迭代列表,获取每个人的双精度属性并求和,或者使用Java 8 Streams:

double sum = L.stream().mapToDouble(Person::getDoubleProperty).sum();

其中,
getDoubleProperty
代表
Person
类中返回双精度值的方法的名称。

您可以迭代列表,获取每个Person的double属性并求和,或者使用Java 8 Streams:

double sum = L.stream().mapToDouble(Person::getDoubleProperty).sum();

其中,
getDoubleProperty
代表
Person
类中返回双精度值的方法的名称。

只需在persons上使用for循环:

double sum = 0;
for(Person p : L)
    sum += p.getDouble();
System.out.print(sum);

只需在人员上使用for循环:

double sum = 0;
for(Person p : L)
    sum += p.getDouble();
System.out.print(sum);

您有两个选项可以对其进行迭代

A)按要求使用迭代器

Person person = new Person();
ListIterator<Person> listIterator = L.listIterator();

while (listIterator.hasNext()) {
      person = listIterator.next();
      double value = person.getDoubleAttribute();
}

PS:非常不鼓励使用
大写字母启动
Java
变量或属性

A)按要求使用迭代器

Person person = new Person();
ListIterator<Person> listIterator = L.listIterator();

while (listIterator.hasNext()) {
      person = listIterator.next();
      double value = person.getDoubleAttribute();
}


PS:非常不鼓励使用
大写字母开始
Java
变量或属性来澄清:你是在问如何迭代列表吗?不,我知道迭代,我只想从具有不同数据类型的列表中选择特定元素。该列表只包含一种类型:Person。澄清一下:您是在问如何迭代列表吗?不,我知道迭代,我只想从具有不同数据类型的列表中选择特定元素。该列表只包含一种类型:Person。我认为您的方法比公认的答案更好;)但由于扩展循环时错误率增加,应避免跳过括号。请参见@KnutKnutsen为每个
循环使用
,这可能是最简单的方法,但不是最佳方法。OP还在
LinkedList
中要求使用
Iterator
。@JordiCastilla为什么不是最优的?当然,他要求使用
迭代器,但据我所知,for-each循环将在内部转换为类似的方法。就连甲骨文也支持使用for each,见@JordiCastilla PS:I不是说你的答案是错的,但不是那么漂亮;)@KnutKnutsen内部转换正是不太理想的意思;)。。。无论如何,我完全同意你的看法,我不喜欢迭代器,代码不太清晰,但它们在内存使用方面更好……我认为你的方法比公认的答案更好;)但由于扩展循环时错误率增加,应避免跳过括号。请参见@KnutKnutsen为每个
循环使用
,这可能是最简单的方法,但不是最佳方法。OP还在
LinkedList
中要求使用
Iterator
。@JordiCastilla为什么不是最优的?当然,他要求使用
迭代器,但据我所知,for-each循环将在内部转换为类似的方法。就连甲骨文也支持使用for each,见@JordiCastilla PS:I不是说你的答案是错的,但不是那么漂亮;)@KnutKnutsen内部转换正是不太理想的意思;)。。。无论如何,我完全同意你的看法,我不喜欢迭代器,代码不太清晰,但它们在内存使用方面更好…我知道你会恨我;),但是说到内存使用,把
Person=…
放在循环之外不是更好吗?因为现在它在每次迭代中都会保留新的内存空间?我知道你会恨我;),但是说到内存使用,把
Person=…
放在循环之外不是更好吗?因为现在它在每次迭代中都会保留新的内存空间?