Вывод верный, но не проходит по последниму пункту : Метод getAllFriendsAndPotentialFriends должен быть реализован согласно условию
package com.javarush.task.task36.task3611;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/*
Сколько у человека потенциальных друзей?
*/

public class Solution {
    private boolean[][] humansRelationships;

    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.humansRelationships = generateRelationships();

        Set<Integer> allFriendsAndPotentialFriends = solution.getAllFriendsAndPotentialFriends(4, 2);
        System.out.println(allFriendsAndPotentialFriends);                              //expected: [0, 1, 2, 3, 5, 7]
        Set<Integer> potentialFriends = solution.removeFriendsFromSet(allFriendsAndPotentialFriends, 4);
        System.out.println(potentialFriends);                                           //expected: [2, 5, 7]
    }

    public Set<Integer> getAllFriendsAndPotentialFriends(int index, int deep) {
        Set<Integer> resultSet = new HashSet<>();
        if (deep == 0) return resultSet;
        ArrayList<Integer> indexOfFriendsFinal = new ArrayList<>();
        boolean[][] arrOfFriends = generateRelationships();
        int count = 0;
        indexOfFriendsFinal = searchFriends(index, arrOfFriends);
        ArrayList<Integer> intermediate;
        ArrayList<Integer> tempList = new ArrayList<>();
        tempList.addAll(indexOfFriendsFinal);
        while (count < deep - 1) {
            for (int i = 0; i < tempList.size(); i++) {
                intermediate = searchFriends(indexOfFriendsFinal.get(i), arrOfFriends);
                for (Integer elem : intermediate) {
                    if (!indexOfFriendsFinal.contains(elem) && elem != index) {
                        indexOfFriendsFinal.add(elem);
                    }
                }
            }
            count++;

            Iterator iterator = tempList.iterator();
            while (iterator.hasNext()) {
                Object element = iterator.next();
                iterator.remove();
            }

            tempList.addAll(indexOfFriendsFinal);
        }

        for (Integer elem : indexOfFriendsFinal) {
            resultSet.add(elem);
        }
        return resultSet;
    }

    //remove people from set, with which you have already had relationship
    public Set<Integer> removeFriendsFromSet(Set<Integer> set, int index) {
        for (int i = 0; i < humansRelationships.length; i++) {
            if ((i < index) && (index < humansRelationships.length) && humansRelationships[index][i]) {
                set.remove(i);
            } else if ((i > index) && humansRelationships[i][index]) {
                set.remove(i);
            }
        }
        return set;
    }

    public ArrayList<Integer> searchFriends(int index, boolean[][] arrOfFriends) {
        ArrayList<Integer> listOfFriends = new ArrayList<>();
        int i = index;
        for (int j = 0; j < i; j++) {
            if (arrOfFriends[i][j]) {
                listOfFriends.add(j);
            }
        }
        int j = index;
        for (i = i + 1; i < arrOfFriends.length; i++) {
            if (arrOfFriends[i][j]) {
                listOfFriends.add(i);
            }
        }
        return listOfFriends;
    }

    //return test data
    private static boolean[][] generateRelationships() {
        return new boolean[][]{
            {true},                                                                 //0
            {true, true},                                                           //1
            {false, true, true},                                                    //2
            {false, false, false, true},                                            //3
            {true, true, false, true, true},                                        //4
            {true, false, true, false, false, true},                                //5
            {false, false, false, false, false, true, true},                        //6
            {false, false, false, true, false, false, false, true}                  //7
        };
    }
}