2016-04-14 22 views
1

一つだけのフィールドを抽出し、Javaで新しいリストを作成します。私のコードの特定の時点で私は次のクラス持っ

public class Person { 
    private Integer id; 
    private String name; 
    private String address; 
    ... 
} 

を、私は人のリストを作成:

List<Person> people = getPeople(); 

私は必要なもの元のリストのidフィールドのみで新しいリストを作成することです。もちろん、私は、リストを反復処理し、新しいものを作成することができます。

List<Integer> idsList = new ArrayList<Integer>(); 
for (Person person: people){ 
    idsList.add(person.getId()); 
} 

しかし、私は反復処理せずにこれを行う方法があるかどうだろうか。

私はJDK6を使用しています。

は、それはあなたがListで何をする必要があるかによって異なり、事前

+7

- JDK8のみ。 – EpicPandaForce

+0

'List 'を 'Map 'にすることはできません。あなたはkeyとvalueSetとして2つの 'List'を使い、' n(1) 'の時間に' Person'をidで得ることができます。 – SomeJavaGuy

+0

@KevinEsche、私はそのリストが私のコード内の他の多くのクラスで使われているので、私はできません。 – Genzotto

答えて

3

にありがとうございました。それはあなたが直接変更することはできません元のリストのIDを表示するためにあなたが満足している場合は、この操作を行うことができます。

public static List<Integer> idList(final List<Person> people) { 
    return new AbstractList<Integer>() { 
     @Override 
     public Integer get(int index) { 
      return people.get(index).getId(); 
     } 
     @Override 
     public int size() { 
      return people.size(); 
     } 
    }; 
} 

を使用すると、idのArrayListが、その後、あなたは反復する必要があるとしている必要がある場合。 Java8で

1

List<Person> people = getPeople(); 
List<Integer> ids = people.stream() 
    .map(Person::getId) 
    .collect(Collectors.toList()); 

EDIT 申し訳ありませんが気づいていないJDKバージョン。 J6 +グアバについては

それは次のようになります。

List<Person> people = getPeople(); 
List<Integer> ids = FluentIterable.from(people) 
.transform(new Function<Person, Integer>() { 
    @Override 
    public Integer apply(Person person) { 
     return person.getId(); 
    } 
}).toList(); 

あなたは明らかにそれをより明確にするために、いくつかの静的変数に関数を抽出することができます。

private static final Function<Person, Integer> TO_ID = new Function<Person, Integer>() { 
    @Override public Integer apply(Person person) { 
     return person.getId(); 
    } 
}; 

public static void main(String [] args) { 
    List<Person> people = getPeople(); 
    List<Integer> ids = FluentIterable.from(people) 
      .transform(TO_ID) 
      .toList(); 
} 
0

ちょうどここに考えを投げてください。

あなたのコードがpersonオブジェクトをリストに追加するときに、idをリストに直接追加してみませんか?これは、ur idリストが即座に維持されるようにするためで、最後にidリストを作成するために人リストをループする必要はありませんか?

ご質問が完全に理解できない場合は、私にお知らせください。