いくつかの配列データの処理に関して、あなた自身がそれを忘れて探すのを防ぐために、いくつかの一般的に使用される方法がここに記録されています。
一般的に、一部のリストの処理には、グループ化、並べ替え、マージ、配置などが含まれ、データベースとの対話が途中で含まれる場合があります。もちろん、一部のjarパッケージでは、配列データのカプセル化が優れています。注意を払うことができます。それを達成するために「特別な」方法を使用する必要がないようにすることは、面倒であるだけでなく、エレガントでもありません。
1.バッチのデータ
一部のバッチデータ処理には、データのグループ化が含まれます。
List<Integer> list = Arrays.asList(23, 18, 20, 2, 12, 9, 6, 14, 1, 87, 15, 99);
//1、直接分组(推荐)
List<List<Integer>> partition = Lists.partition(list, 10); //10个一组,封装到partition中
//2、可以个人处理
int num = list.size()/10 + list.size()%10==0?0:1; //计算要切割成几份
// 然后使用循环截取。不过要注意的是要和list的大小比较,防止下标溢出
for (int i = 0; i < num; i++) {
if((i+1)*10<list.size()){
List<Integer> integerList = list.subList(i * 10, (i + 1) * 10);
// integerList to do sth
} else {
List<Integer> integerList = list.subList(i * 10, list.size());
// integerList to do sth
}
}
2.データの合計
List<Book> bookList = new ArrayList<>();
// BigDecimal类型求和
BigDecimal sum = bookList.stream().map(book -> book.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
// int、double、long类型求和
int sumInt = bookList.stream().mapToInt(book -> book.getWidth()).sum();
long sumLong = bookList.stream().mapToLong(book -> book.getLength()).sum();
double sumDouble = bookList.stream().mapToDouble(book -> book.getHight()).sum();
3.カスタマイズされた並べ替え
//定制排序,可以根据条件定义排序,一个或多个条件均可以,下面适示意的是从大到小排序
// 判断条件是自己写的,可以根据需要来,仿写的话没啥大问题哈
public class Book implements Comparable<Book> {
private String name;
private BigDecimal price ;
private Long length;
private Integer width;
private Double hight;
@Override
public int compareTo(Book o) {
if(o.getWidth()>this.getWidth()){
return 1;
} else if(o.getWidth()<this.getWidth()){
return -1;
}
return 0;
}
}
4.データは条件ごとにグループ化されています
これに遭遇したかどうかはわかりませんが、より一般的に使用されています。たとえば、本を見つけた場合は、その本の場所に応じてグループ化できます。もちろん、これも可能です。データベース内にありますが、コードで処理する必要がある場合があります。サブクエリのバッチもあり、データが対応している場合、それは対応するグループのグループです。
List<Book> bookList = new ArrayList<>();
Book book = new Book();
book.setWidth(12);
book.setName("Ebook");
bookList.add(book);
Book book1 = new Book();
book1.setWidth(2);
book1.setName("java");
bookList.add(book1);
Book book2 = new Book();
book2.setWidth(17);
book2.setName("java");
bookList.add(book2);
Map<String, List<Book>> groupMap= bookList.stream().collect(Collectors.groupingBy(vo -> vo.getName()));
System.out.println(JSON.toJSONString(groupMap));
印刷物は名前でグループ化されています:
{"java":[{"name":"java","width":2},{"name":"java","width":17}],"Ebook":[{"name":"Ebook","width":12}]}
グループ化プロセスはvo-> vo.getName()を使用し、必要に応じて独自のロジックを実装できます
5.データはキーと値によって処理されます
後続の操作を容易にするために、オブジェクトをキーと値の形式に分割する必要がある場合があります。これに対処する方法もあります。
List<Book> bookList = new ArrayList<>();
Book book = new Book();
book.setWidth(12);
book.setName("Ebook");
bookList.add(book);
Book book1 = new Book();
book1.setWidth(2);
book1.setName("java");
bookList.add(book1);
Book book2 = new Book();
book2.setWidth(17);
book2.setName("java");
bookList.add(book2);
// 这个是固定写法,后面的 (p1, p2) -> p2)是指如果有两个value相同,是选择前一个p1,还是选择后一个p2作为map的value,如下,名称java对应的就是后一个了(17),value覆盖
Map<String, Integer> map = bookList.stream().collect(Collectors.toMap(voKey -> voKey.getName(), voValue -> voValue.getWidth(), (p1, p2) -> p2));
System.out.println(JSON.toJSONString(map));
もちろん、同じキーで値を累積または連結することもできます。
Map<String, Integer> map = bookList.stream().collect(Collectors.toMap(voKey -> voKey.getName(), voValue -> voValue.getWidth(), (p1, p2) -> p1+p2));
補足:6。重複を取り除くためのフィルター
フィールドに応じた重複排除
List<Book> bookList = new ArrayList<>();
bookList.add(new Book("语文书", "12.3", "张三"));
bookList.add(new Book("语文书", "12.3", "李四"));
bookList.add(new Book("数学书", "16.3", "张三"));
bookList.add(new Book("英语书", "11.3", "王五"));
bookList.add(new Book("数学书", "16.3", "何柳"));
// 过滤掉bookList中 书籍相同的数据
List<Book> resultList = bookList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(Book::getName))), ArrayList::new));
System.out.println("结果:" + JSONArray.toJSONString(resultList));
結果が出力されます。
结果:[{"author":"张三","name":"数学书","price":"16.3"},{"author":"王五","name":"英语书","price":"11.3"},{"author":"张三","name":"语文书","price":"12.3"}]
それはあなた自身のニーズに依存します。他の複雑な処理が必要な場合はそれを実装することもできますが、それがより複雑な場合は、あなた自身の設計を検討し、設計を最適化できるかどうかを確認する必要があります〜
一時的に思い浮かぶリスト処理は少ないので、後で思いついたら追加しましょう!
よろしければお褒めの言葉をください〜
犠牲も勝利もありません!