【发布时间】:2021-08-13 05:42:26
【问题描述】:
我想创建一个方法,告诉我谁是 ArrayList 中最年长的人,谁是最年轻的人。该方法将接收我要应用该方法的arraylist,我的代码中有3个,每个都是一个联系人列表。
该方法假设返回人的姓名,但我不知道该怎么做。 Familia, Profissional 和 Amigos 是我的数组列表,“idade” = 年龄和“nome” = 姓名。
package com.company;
public class Contato {
public String nome;
public int idade;
public String sexo;
public String profissao;
public String telefone;
public String email;
public Contato(String nome, int idade, String sexo, String profissao, String telefone, String email) {
this.nome = nome;
this.idade = idade;
this.sexo = sexo;
this.profissao = profissao;
this.telefone = telefone;
this.email = email;
}
@Override
public String toString() {
return "" +
nome + ',' +
idade + " anos de idade, " +
"do sexo " + sexo + ',' +
profissao + ',' +
" telefone nº " + telefone + ", " +
"e-mail:" + email;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public String getProfissao() {
return profissao;
}
public void setProfissao(String profissao) {
this.profissao = profissao;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
package com.company;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class GestaoContatos extends Contato {
ArrayList<Contato> Familia = new ArrayList();
ArrayList<Contato> Amigos = new ArrayList();
ArrayList<Contato> Profissional = new ArrayList();
public GestaoContatos(Contato c) {
super(c.nome, c.idade, c.sexo, c.profissao, c.telefone, c.email);
}
public void adicionaContato(String nomeAgenda, Contato contato) {
if( nomeAgenda == "Familia"){
Familia.add(contato);
} else
if(nomeAgenda == "Amigos"){
Amigos.add(contato);
} else
if(nomeAgenda == "Profissional") {
Profissional.add(contato);
} else
System.out.println("Indispnível");
}
public void eliminaContato(String nomeContato) {
for(int i = 0; i < Familia.size(); i++) {
if(getFamilia().contains(nomeContato)) {
Familia.remove(nomeContato);
}
}
}
public void printaLista(String nomeAgenda){
if(nomeAgenda.equals("Familia")) {
Familia.forEach(System.out::println);
}
if(nomeAgenda.equals("Amigos")) {
Amigos.forEach(System.out::println);
}
if(nomeAgenda.equals("Profissional")) {
Profissional.forEach(System.out::println);
}
else {
throw new RuntimeException("Opcao invalida");
}
}
public void tooString() {
var contatos = new ArrayList<Contato>();
Familia.forEach(it -> contatos.add(it));
Amigos.forEach(it -> contatos.add(it));
Profissional.forEach(it -> contatos.add(it));
System.out.println(contatos.toString());
}
public void olderPerson(String nomeAgenda){
int i = 0;
if (nomeAgenda.equals("Amigos")) {
for (i = 0; Familia.size(); i++) {
Familia.stream().filter();
}
}
}
public void geraListaBinaria() throws IOException {
var file = new File("C:\\Users\\Jorge Luiz\\Desktop\\contatos.txt");
var writer = new FileWriter(file.getName());
writer.write(this.getProfissional().toString());
writer.write(this.getFamilia().toString());
writer.write(this.getProfissional().toString());
writer.close();
}
public ArrayList<Contato> getFamilia() {
return Familia;
}
public void setFamilia(ArrayList<Contato> familia) {
Familia = familia;
}
public ArrayList<Contato> getAmigos() {
return Amigos;
}
public void setAmigos(ArrayList<Contato> amigos) {
Amigos = amigos;
}
public ArrayList<Contato> getProfissional() {
return Profissional;
}
public void setProfissional(ArrayList<Contato> profissional) {
Profissional = profissional;
}
}
【问题讨论】:
-
好吧,为了得到一个最小值(或最大值),最简单的解决方案是为初始当前最小值选择一个不可能高的值,迭代列表,每次找到一个值小于当前最小值,更新当前最小值。用尽所有值后,“当前最小值”将是所有值中的最小值。找到一个最大值是一样的,但是你会从一个不可能的低值开始,所以第一个“真实”值肯定会高于这个值。如何实现?
-
我如何得到它?我正在尝试使用 forEach,对吗?
public void olderPerson(String nomeAgenda){ int i = 99999; if (nomeAgenda.equals("Amigos")) { Familia.forEach(contato -> { int c = contato.getIdade(); if(c < i) { System.out.println(); } }); } } -
getIdade() 是从 Contato 或 Contact 获取年龄的方法。
-
我使用流提供了答案,但我现在看到您使用
for-loop标记了您的问题。如果您想要直播答案,请告诉我,我会恢复我的答案。 -
旁注:不会将
String对象与==进行比较。所以if (nomeAgenga == "Amigos")是行不通的。使用if ("Amigos".equals(nomeAgenda)以便使用.equals方法。示例代码混合了==和.equals()。
标签: java for-loop arraylist java-stream