import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class JI9042835 {
	String s; 
	int i; 

	JI9042835(String s, int i) { 
		this.s = s; 
		this.i = i; 
	} 
	
	@Override 
	public int hashCode() { 
		final int prime = 31; 
		int result = 1; 
		result = prime * result + i; 
		result = prime * result + ((s == null) ? 0 : s.hashCode()); 
		return result; 
	} 

	@Override 
	public boolean equals(Object obj) { 
		if (this == obj) 
			return true; 
		if (obj == null) 
			return false; 
		if (getClass() != obj.getClass()) 
			return false; 
		JI9042835 other = (JI9042835) obj; 
		if (i != other.i) 
			return false; 
		if (s == null) { 
			if (other.s != null) 
				return false; 
		} else if (!s.equals(other.s)) 
			return false; 
		return true; 
	} 

	public static void main(String[] args) {
		Set<JI9042835> set = new HashSet<>(Arrays.asList(new JI9042835("one", 1))); 
		assert(1 == (set.size())); 
		set.iterator().next().s = "two"; 
		System.out.println("Result of removeIf : " + set.removeIf(e -> e.i == 1));
		System.out.println("Checking Set after removeIf:");
		for(JI9042835 elem : set)
		{
			System.out.print("i = " + elem.i);
			System.out.println(" s = " + elem.s);
		}
	}

}
