package LibPuzzles; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; /** * 下面中的方法都是用一行的代码实现功能。 * * @author xixizhao * */ public class OneLine { // 方法1,编写一个方法,它接受一个包含元素的List,并返回一个新的List,它以相同的顺序包含相同的元素,只不过它把第二次以及后续出现的重复元素都剔除了。 static <E> List<E> withoutDuplicate(List<E> original) { return new ArrayList<E>(new LinkedHashSet<E>(original)); } // 方法2,编写一个方法,它接受一个由0个或多个由逗号分隔的标志所组成的字符串,并返回一个表示这些标志的字符串数组,数组中的元素的顺序与这些标志在输入字符串中出现的顺序相同。 // 每一个逗号后面都可能会跟随0个或多个空格字符,这个方法忽略它们。例如,如果你传递的字符串是”fear, // surprise, ruthless efficiency, an almost fanatical devotion to the Pope, // nice red // uniforms”,那么你得到的将是一个包含5个元素的字符串数组,这些元素是”fear”,”surprise”,”ruthless // efficiency”,”an almost fanatical devotion to the Pope” 和 “nice red // uniform”。 static String[] parse(String string) { return string.split(",\\s*");// \S表示匹配所有的非空白字符。小写的正好意思相反。 } //方法4.编写一个方法,它接受两个int数值,并在第一个数值与第二个数值以二进制补码形式进行比较, //具有更多的位被置位数时,返回true为了在一行代码中解决该谜题, //你需要了解在5.0版本中添加到Java平台中的一整套位操作方法。 //整数类型的包装器类(Integer、Long、Short、Byte和Char)现在支持通用的位处理操作, //包括highestOneBit、lowestOneBit、numberOfLeadingZeros、numberOfTrailingZeros、 //bitCount、rotateLeft、rotateRight、reverse、signum和reverseBytes。 //在本例中,你需要的是Integer.bitCount,它返回的是一个int数值中被置位的位数: static Boolean hasMoreBitsSet(int i, int j) { return (Integer.bitCount(i) > Integer.bitCount(j)); } public static void main(String[] args) { String[][] strs = {{"a", "b", "c"}, {"d", "e", "f"}}; String str = "a, b c, c f, d f f"; String[] strArray = parse(str); for (String s : strArray) { System.out.println(s); } // 方法3.假设你有一个多维数组,出于调试的目的,你想打印它。你不知道这个数组有多少级,以及在数组的每一级中所存储的对象的类型。编写一个方法, //它可以向你显示出在每一级上的所有元素。这是一个讲究技巧的问题。你甚至不必去编写一个方法。这个方法在5.0或之后的版本中已经提供了, //它就是Arrays.deepToString。如果你传递给它一个对象引用的数组,它将返回一个精密的字符串表示。 //它可以处理嵌套数组,甚至可以处理循环引用,即一个数组元素直接或间接地引用了其嵌套外层的数组。 //事实上,5.0版本中的Arrays类提供了一整套的toString、equals和hashCode方法, //使你能够打印、比较或散列任何原始类型数组或对象引用数组的内容。 System.out.println(Arrays.deepToString(strs)); } }