-5

ここにリストがあります:

List<String> container = new ArrayList<String>();
container.add("Book");
container.add("Paper");
container.add("Book");
container.add("Pen");
container.add("Pen");
container.add("Book");

このリストのデータを次のような 3 つのサブリストに分類するにはどうすればよいですか。

List <String> container1  ==>that still keep 3 elements which have the same name "Book"
List <String> container2  ==>that have 1 element which is "Paper"
List <String> container3  ==>that still keep 2 elements which have the same name "Pen"

ご協力ありがとうございました

私の質問がよくわからないというコメントが多い場合は、このように質問させていただきます。

上記の例のリストよりも多くの重複要素を持つリストがある場合、container1、container2...、containerN のようなサブコンテナ リストは、重複要素の数に応じて生成されます

どうやってやるの?

4

2 に答える 2

3

冗長性を気にしない場合は、Google Guava のFluentIterable. これにより、特定の を指定してPredicate、コレクションをフィルタリングできます。

List<String> words = Lists
        .newArrayList("Book", "Paper", "Book", "Pen", "Paper", "Book");

FluentIterable<String> bookFiltered = FluentIterable
        .from(words)
        .filter(new Predicate<String>() {
    @Override
    public boolean apply(final String input) {
        return "Book".equals(input);
    }
});

FluentIterable<String> paperFiltered = FluentIterable
        .from(words)
        .filter(new Predicate<String>() {
    @Override
    public boolean apply(final String input) {
        return "Paper".equals(input);
    }
});

FluentIterable<String> penFiltered = FluentIterable
        .from(words)
        .filter(new Predicate<String>() {
    @Override
    public boolean apply(final String input) {
        return "Pen".equals(input);
    }
});

System.out.println(bookFiltered); // [Book, Book, Book]
System.out.println(paperFiltered); // [Paper, Paper]
System.out.println(penFiltered); // [Pen]
于 2013-05-11T23:16:56.503 に答える