1.简单的filter和map的单独形式
List<String> newlist = list.stream().map(Person::getName).collect(toList());
list = list.stream().filter(person -> person.getAge() == 20).collect(toList());
2.map与filter的位置互换
List<String> list = entities.stream().map(Entity::getId).filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList());
List<String> list1 = entities.stream().filter(x->x.getId() != 1).map(Entity::getId).distinct().collect(Collectors.toList());
3.distinct的一般过滤形式
List<Entity> List5 = entities.stream().distinct().collect(Collectors.toList());
4.StreamEx过滤 合并多个stream
List<String> List6 = StreamEx.of(entities).distinct(Entity::getNumber).collect(Collectors.toList());
5.distinctByKey在使用filter时需要重定义
List<Base> obj = List.stream().filter(distinctByKey(Base::getId)).collect(Collectors.toList());
private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object,Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
6.list中根据多字段进行分组
Map<String, List<VhlAlarmStatusMgtEntity>> map = list.stream().collect(
//注意,{0}#{1}#{2}#{3}#{4}必须按序,不得违反顺序
Collectors.groupingBy(a -> StringUtil.format("{0}#{1}#{2}#{3}#{4}", a.getCarType(),a.getVin(),a.getAlarmLevel(),a.getAlarmItem(),a.getDataType())));
自定义的分组类,注意,不要用其他依赖,否则会报错
import java.text.MessageFormat;
public class StringUtil {
public static String format(String value, Object... paras) {
return MessageFormat.format(value, paras);
}
}