解题思路 (只供参考,不是最优解

  1. 将输入的数据先转换成二进制数;
  2. 通过字符串截取将二进制数据存储到集合中;
  3. 将改集合通过Stream流转化成Map集合,key为数据本身,value为相同数据的和;
  4. 最后通过循环key和value来获取符合条件的数据;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author Administrator
 */
public class Main {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);
        int input = scanner.nextInt();
        String binaryString = Integer.toBinaryString(input);
        for (int i = 0; i < binaryString.length(); i++) {
            integerList.add(Integer.parseInt(binaryString.substring(i, i + 1)));
        }
        Map<Integer, Long> map =
                        integerList.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
        map.forEach((k, v) -> {
            if (k == 1) {
                System.out.println(v);
            }

        });
    }
}