/**
* 操作集合
*/
import java.util.Collection;
import java.util.HashMap;
import java.util.function.Predicate;
import java.util.function.ToIntFunction;
public class Test_Collection {
public static void main(String[] args) {
HashMap<Integer, String> m = new HashMap<>();
m.put(1, "卡加斯·刃拳");
m.put(2, "古尔丹");
m.put(3, "纳兹格林将军");
m.put(4, "格罗姆·地狱咆哮");
m.put(5, "耐奥祖");
m.put(6, "杜隆坦");
m.put(7, "奥格瑞姆·毁灭之锤");
m.put(8, "萨尔");
m.put(9, "黑手");
m.put(0, "风行者将军");
Collection<String> setV = m.values();
//用predicate操作集合
System.out.println("删除将军?-" + setV.removeIf(new Predicate<String>() {
@Override
public boolean test(String s) {
return s.contains("将军");
}
}));
System.out.println("id含有格字的人数是:" + calAll(
setV,
new Predicate() {
@Override
public boolean test(Object o) {
return ((String) o).contains("格");
}
}));
//改写成lambda表达式
System.out.println("id长度大于3:" + calAll(setV, o -> ((String) o).length() > 3));
System.out.println("id含有·:" + calAll(setV, o -> ((String) o).contains("·")));
System.out.println(setV);
//用流操作
System.out.println("每个名字长度:");
setV.stream().mapToInt(new ToIntFunction<String>() {
@Override
public int applyAsInt(String value) {
return value.length();
}
}).forEach(System.out::print);
System.out.println();
System.out.println("id长度超过5:" + setV.stream().filter(s -> s.length() > 5).count());
System.out.println("最长的名字字数:" + setV.stream().mapToInt(value -> value.length()).max());
}
/**
* 用predicate操作集合
*
* @param ts
* @param p
* @return
*/
public static int calAll(Collection ts, Predicate p) {
int total = 0;
for (Object t : ts) {
if (p.test(t)) {
total++;
}
}
return total;
}
}
删除将军?-true
id含有格字的人数是:2
id长度大于3:3
id含有·:3
[卡加斯·刃拳, 古尔丹, 格罗姆·地狱咆哮, 耐奥祖, 杜隆坦, 奥格瑞姆·毁灭之锤, 萨尔, 黑手]
每个名字长度:
63833922
id长度超过5:3
最长的名字字数:OptionalInt[9]
Process finished with exit code 0
通过Java Stream API进行集合操作,包括过滤特定条件(如id包含特定字符)、统计id长度等,展示了Stream的强大功能。例如,找出id包含'格'字的人数为2,id长度大于3的个数为3,含有'·'的id数量为3,并列举了相关实例。

983

被折叠的 条评论
为什么被折叠?



