Неправильный вид связанного списка - PullRequest
0 голосов
/ 11 июня 2018

У меня есть связанный список объектов (Книги, в каких полях есть заголовок, автор и др.).Почему эта реализация сортировки по названию дает неправильные результаты?

import java.util.*;

public class sort
{
    public static void main(String[] args)
    {
        LinkedList<Book> l = new LinkedList<>();
        l.add(new Book("Vargas Fred", "Il morso della reclusa"));
        l.add(new Book("Postorino Rossella", "Le assaggiatrici"));
        l.add(new Book("Bythell Shaun", "Una vita da libraio"));
        l.add(new Book("Simenon Georges", "Il fondo della bottiglia"));



        Collections.sort(l, new Comparator<Book>() {
            @Override
            public int compare(Book o1, Book o2) {
                return o1.title.length() - o2.title.length();
            }
        });


        for(Book i : l)
        {
            System.out.println(i.title);
        }
    }
}

Ожидается: - Il fondo della bottiglia - Il morso della reclusa - Le assaggiatrici - Una vita da libraio

Результат: - Leassaggiatrici - Una vita da libraio - Il morso della reclusa - Il fondo della bottiglia

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Это должно решить вашу проблему.Я использую лямбды и JDK 8

Вот пример Book класс:

public class Book {

  final String author;
  final String title;


  public Book(String author, String title) {
    this.author = author;
    this.title = title;

  }

  public String title() {
    return this.title;
  }

  public String author() {
    return this.author;
  }
}

Теперь сравнение происходит здесь:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortTest {

  public static void main(String... args) {
    List<Book> l = new ArrayList<>();
    l.add(new Book("Vargas Fred", "Il morso della reclusa"));
    l.add(new Book("Postorino Rossella", "Le assaggiatrici"));
    l.add(new Book("Bythell Shaun", "Una vita da libraio"));
    l.add(new Book("Simenon Georges", "Il fondo della bottiglia"));

    Collections.sort(l, Comparator.comparing(Book::title));
    l.forEach(book -> System.out.println(book.title));
  }

}
0 голосов
/ 11 июня 2018

Если вы хотите отсортировать книги по алфавиту, а не по длине заголовка, вам нужно использовать это:

return o1.title.compareTo(o2.title);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...