### Queens Attack II - Java Solution!

Here is the problem!
public class QueensAttack {

public static int queensAttack(int boardSize, int obstacleAmount, int queen_pos_y, int queen_pos_x, int[][] obstacles) {
int queensAttack = 0;

final Set<ObstacleLocation> obstacleLocations = new HashSet<ObstacleLocation>();
for (int i = 0; i < obstacleAmount; i++) {
final ObstacleLocation obstacleLocation = new ObstacleLocation(obstacles[i][0], obstacles[i][1]);
}

queensAttack += goNorth(boardSize, queen_pos_y, queen_pos_x, obstacleLocations);
queensAttack += goSouth(queen_pos_y, queen_pos_x, obstacleLocations);
queensAttack += goEast(boardSize, queen_pos_y, queen_pos_x, obstacleLocations);
queensAttack += goWest(queen_pos_y, queen_pos_x, obstacleLocations);

queensAttack += goNorthEast(boardSize, queen_pos_y, queen_pos_x, obstacleLocations);
queensAttack += goSouthEast(boardSize, queen_pos_y, queen_pos_x, obstacleLocations);
queensAttack += goNorthWest(boardSize, queen_pos_y, queen_pos_x, obstacleLocations);
queensAttack += goSouthWest(queen_pos_y, queen_pos_x, obstacleLocations);

return queensAttack;
}

private static int goNorth(int boardSize, int queen_pos_y, int queen_pos_x, Set<ObstacleLocation> obstacleLocations) {
int north = 0;

while (true) {
queen_pos_y = queen_pos_y + 1;
if ((boardSize + 1) == queen_pos_y) {
break;
}
if (obstacleExists(queen_pos_y, queen_pos_x, obstacleLocations)) {
break;
}
north++;
}

return north;
}

private static int goSouth(int queen_pos_y, int queen_pos_x, Set<ObstacleLocation> obstacleLocations) {
int south = 0;

while (true) {
queen_pos_y = queen_pos_y - 1;
if (0 == queen_pos_y) {
break;
}
if (obstacleExists(queen_pos_y, queen_pos_x, obstacleLocations)) {
break;
}
south++;
}

return south;
}

private static int goEast(int boardSize, int queen_pos_y, int queen_pos_x, Set<ObstacleLocation> obstacleLocations) {
int east = 0;

while (true) {
queen_pos_x = queen_pos_x + 1;
if ((boardSize + 1) == queen_pos_x) {
break;
}
if (obstacleExists(queen_pos_y, queen_pos_x, obstacleLocations)) {
break;
}
east++;
}

return east;
}

private static int goWest(int queen_pos_y, int queen_pos_x, Set<ObstacleLocation> obstacleLocations) {
int west = 0;

while (true) {
queen_pos_x = queen_pos_x - 1;
if (0 == queen_pos_x) {
break;
}
if (obstacleExists(queen_pos_y, queen_pos_x, obstacleLocations)) {
break;
}
west++;
}

return west;
}

private static int goNorthEast(int boardSize, int queen_pos_y, int queen_pos_x, Set<ObstacleLocation> obstacleLocations) {
int northEast = 0;

while (true) {
queen_pos_y = queen_pos_y + 1;
queen_pos_x = queen_pos_x + 1;
if ((boardSize + 1) == queen_pos_y) {
break;
}
if ((boardSize + 1) == queen_pos_x) {
break;
}
if (obstacleExists(queen_pos_y, queen_pos_x, obstacleLocations)) {
break;
}
northEast++;
}

return northEast;
}

private static int goSouthEast(int boardSize, int queen_pos_y, int queen_pos_x, Set<ObstacleLocation> obstacleLocations) {
int southEast = 0;

while (true) {
queen_pos_y = queen_pos_y - 1;
queen_pos_x = queen_pos_x + 1;
if (0 == queen_pos_y) {
break;
}
if ((boardSize + 1) == queen_pos_x) {
break;
}
if (obstacleExists(queen_pos_y, queen_pos_x, obstacleLocations)) {
break;
}
southEast++;
}

return southEast;
}

private static int goNorthWest(int boardSize, int queen_pos_y, int queen_pos_x, Set<ObstacleLocation> obstacleLocations) {
int northWest = 0;

while (true) {
queen_pos_y = queen_pos_y + 1;
queen_pos_x = queen_pos_x - 1;
if ((boardSize + 1) == queen_pos_y) {
break;
}
if (0 == queen_pos_x) {
break;
}
if (obstacleExists(queen_pos_y, queen_pos_x, obstacleLocations)) {
break;
}
northWest++;
}

return northWest;
}

private static int goSouthWest(int queen_pos_y, int queen_pos_x, Set<ObstacleLocation> obstacleLocations) {
int southWest = 0;
while (true) {
queen_pos_y = queen_pos_y - 1;
queen_pos_x = queen_pos_x - 1;
if (0 == queen_pos_y) {
break;
}
if (0 == queen_pos_x) {
break;
}
if (obstacleExists(queen_pos_y, queen_pos_x, obstacleLocations)) {
break;
}
southWest++;
}

return southWest;
}

private static boolean obstacleExists(int queen_pos_y, int queen_pos_x, Set<ObstacleLocation> obstacleLocations) {
final ObstacleLocation obstacleLocation = new ObstacleLocation(queen_pos_y, queen_pos_x);
return obstacleLocations.contains(obstacleLocation);
}
}

class ObstacleLocation {
private final int pos_y;
private final int pos_x;

public ObstacleLocation(int pos_y, int pos_x) {
this.pos_y = pos_y;
this.pos_x = pos_x;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ObstacleLocation that = (ObstacleLocation) o;
return pos_y == that.pos_y &&
pos_x == that.pos_x;
}

@Override
public int hashCode() {
return Objects.hash(pos_y, pos_x);
}
}