Random
Random位于java.util
包下,可以产生随机数。
import java.util.Random;
public class RandomText {
public static void main(String[] args) {
//创建随机数对象
Random random = new Random();
//随机产生一个int类型取值范围内的数字。
int num = random.nextInt();
System.out.println(num);
//产生[0~100]之间的随机数。不能产生101
//nextInt翻译为:下一个int类型的数据是101,表明只能取到100
int num2 = random.nextInt(101);
System.out.println(num2);
}
}
//结果-1400250908
//25
生成5个不重复的随机数
编写程序,生成5个不同的随机数。重复的话重新生成
最终生成的五个随机数放到数组当中,要求数组中这5个随机数不重复
import java.util.Arrays;
import java.util.Random;
public class RandomText {
public static void main(String[] args) {
//创建一个Random对象
Random random = new Random();
//准备一个长度为5的一维数组
int[] arr = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = -1;
}
int index = 0;
//while循环,生成随机数
while (index < arr.length) {
//生成随机数
int num = random.nextInt(101);
//判断arr数组中有没有num
//如果没有这个num,就放进去
if (!contains(arr, num)) {
arr[index++] = num;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/**
* 单独编写一个方法,这个方法可以判断数组中是否包含某个元素
*
* @param arr 数组
* @param key 元素
* @return true表示包含,false表示不包含
*/
public static boolean contains(int[] arr, int key) {
for (int i = 0; i < arr.length; i++) {
if (key == arr[i]) {
return true;
}
}
return false;
}
}
结果如下:
函数式接口
什么是函数式接口
函数式接口就是只定义一个抽象方法的接口,如下
Runnable接口类:源代码如下
Callable接口类:
同时只要接口只定义了一个抽象方法,那它就还是一个函数式接口,哪怕这个接口有好多默认的方法实现,如Comparator接口类:
总结:只要接口只定义了一个抽象方法,那它就是一个函数式接口,还有在上述Java Api中都有个@FunctionalInterface注解,这表示着该接口会设计成一个函数式接口,不符合规范的话,就会编译报错。
java中内置核心函数式接口
其他接口
package com.atguigu.java1;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
/**
* java内置的4大核心函数式接口
*
* 消费型接口 Consumer<T> void accept(T t)
* 供给型接口 Supplier<T> T get()
* 函数型接口 Function<T,R> R apply(T t)
* 断定型接口 Predicate<T> boolean test(T t)
*
*
* @author shkstart
* @create 2019 下午 2:29
*/
public class LambdaTest2 {
@Test
public void test1(){
happyTime(500, new Consumer<Double>() {
@Override
public void accept(Double aDouble) {
System.out.println("学习太累了,去天上人间买了瓶矿泉水,价格为:" + aDouble);
}
});
System.out.println("********************");
happyTime(400,money -> System.out.println("学习太累了,去天上人间喝了口水,价格为:" + money));
}
public void happyTime(double money, Consumer<Double> con){
con.accept(money);
}
@Test
public void test2(){
List<String> list = Arrays.asList("北京","南京","天津","东京","西京","普京");
List<String> filterStrs = filterString(list, new Predicate<String>() {
@Override
public boolean test(String s) {
return s.contains("京");
}
});
System.out.println(filterStrs);
List<String> filterStrs1 = filterString(list,s -> s.contains("京"));
System.out.println(filterStrs1);
}
//根据给定的规则,过滤集合中的字符串。此规则由Predicate的方法决定
public List<String> filterString(List<String> list, Predicate<String> pre){
ArrayList<String> filterList = new ArrayList<>();
for(String s : list){
if(pre.test(s)){
filterList.add(s);
}
}
return filterList;
}
}