Как убрать лайк с фото в моем коде

Я написал программу для сайта загрузки фотографий, где пользователи могут лайкать фотографии, у меня есть тестовый скрипт, чтобы лайкнуть фотографию, а затем отобразить все лайки, затем я хочу удалить лайки и отобразить все лайки сейчас. Как мне это сделать?

import java.util.*;

public class Likes {
    private static Hashtable<Photo, TreeSet<User>> likes = new Hashtable<>();

    //like photo
    public static void like(Photo photo, User user) {
        try {
            likes.get(photo).add(user);
        }
        catch (NullPointerException e) {
            likes.put(photo, new TreeSet<>());
            likes.get(photo).add(user);
        }
    }



    //unlike photo
    public static void unlike(Photo photo, User user) {
        try {
            likes.get(photo.remove(user));
        }
        catch (NullPointerException e) {

        }
    }

    //has liked photo
    public boolean hasliked(Photo photo, User user) {
        try {
            return likes.get(photo).contains(user);
        }
        catch (NullPointerException e) {
            return false;
        }
    }

    //get all likes
    public List<Photo> getAllLikes(User user){
        // new empty list
        List<Photo> likedphotos = new ArrayList<Photo>();

        for (Photo photo : likes.keySet()) {
            if (hasliked(photo, user)){
                // add photo to list
                likedphotos.add(photo);
            }
            // return that initial list
        }

        return likedphotos;

    }



    public String toString() {
        return likes.toString();
    }

    public void get(Photo remove) {
    }

    public void remove(Photo photo1, User user1) {
    }
}

Тесты:

import java.sql.SQLOutput;
import java.util.*;

public class TestDrive {

    public static void main(String[] args) throws InputValidationException {



        //create 2 photo object
        Photo photo1 = new Photo();
        Photo photo2 = new Photo();

        //create 1 user object
        User user1 = new User();

        //create 1 like object
        Likes likes1 = new Likes();


        //set 2 photos
        photo1.setimageURL("photo of user 2");
        photo2.setimageURL("photo of user 1");

        //print the 2 photos
        System.out.println(photo1.getimageURL());
        System.out.println(photo2.getimageURL());


        //set 1 user
        user1.setUserName("oopnoob");

        //print the username
        System.out.println(user1.getUserName());

        //Like the 2 photos


        Likes.like(photo1, user1);
        Likes.like(photo2, user1);

        //Test the hasliked method to see if user1 has liked both photos - both should return true

        System.out.println("Should be true: " + likes1.hasliked(photo1, user1));
        System.out.println("Should be true: " + likes1.hasliked(photo2, user1));


        //Test the getAllLikes for user1. Should print 2 photos.

        System.out.println("user1 liked: " + likes1.getAllLikes(user1));


//i dont know how to remove the like from the photo

        //Test the unlike feature by unliking photo1

        likes1.unlike(photo1, user1);


        //Test the getAllLikes - should only print one photo

        System.out.println("user1 liked: " + likes1.getAllLikes(user1));







    }

}

Я предполагаю, что у метода unlike есть ошибка: вместо likes.get(photo.remove(user)) вы должны использовать likes.get(photo).remove(user).

Robert Kock 29.05.2019 15:47

Не связано: используйте вертикальный интервал (пустые строки) с намерение. Не просто бросайте пустые строки здесь и там. Используйте их, чтобы сгруппировать вещи, которые принадлежат друг другу. Не оставляйте 5 пустых строк в середине вашего кода без всякой причины. Постарайтесь, чтобы ваш код выглядел как заботился, когда вы его пишете.

GhostCat 29.05.2019 15:50

И да: перехват исключений (особенно проблем времени выполнения, таких как исключение нулевого указателя) для их игнорировать, то есть Очень плохой. Ты просто выстрелишь себе в ногу. И вместо того, чтобы понять, почему это так и как предотвратить это в будущем, вы решаете идти дальше. Действительно очень плохо.!

GhostCat 29.05.2019 15:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На основе этой части вашего кода

   //unlike photo
public static void unlike(Photo photo, User user) {
    try {
        likes.get(photo.remove(user));
    }
    catch (NullPointerException e) {

    }
}

Похоже, вы удаляете фото, а не лайк

Код должен быть

    //unlike photo
public static void unlike(Photo photo, User user) {
    try {
        likes.get(photo).remove(user);
    }
    catch (NullPointerException e) {

    }
}

Примечание. Перехватывать исключение NullPointerException в классе — очень плохая идея. Если вы считаете, что значение, такое как фотография или пользователь, может быть нулевым, лучше проверить его, прежде чем использовать значение. Также неразумно ловить исключение, а затем игнорировать его. Спасибо @Ghostcat за указание на это.

Да, это было! Спасибо

user11456272 29.05.2019 15:51

@GhostCat Я действительно понимаю, что вы пытаетесь сказать, но если я пойду по этому пути, мне, вероятно, придется реорганизовать класс who ..

azdonald 29.05.2019 16:08

Не совсем: комментарий, говорящий «кстати: ловить NPE и игнорировать это ужасно плохо»… подойдет ;-)

GhostCat 29.05.2019 16:08

Другие вопросы по теме