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));
}
}
库谜题60:用一行代码实现功能
最新推荐文章于 2024-10-29 16:30:52 发布