, если ваша InputStream
поддерживает использование метки, вы можете mark()
использовать ваш входной поток, а затем reset()
. если ваш InputStrem
не поддерживает отметку, вы можете использовать класс java.io.BufferedInputStream
, чтобы вы могли встраивать свой поток внутри BufferedInputStream
, например
InputStream bufferdInputStream = new BufferedInputStream(yourInputStream);
bufferdInputStream.mark(some_value);
//read your bufferdInputStream
bufferdInputStream.reset();
//read it again
Вы можете использовать reduce
для обхода массива и сохранения набора ключей (number
), чтобы проверить, существует ли он. Затем вставьте новый массив.
var data=[
{ number: '31907411282', unix_date: '1547012427' },
{ number: '31907411282', unix_date: '1547013214' },
{ number: '31907514691', unix_date: '1547015155' },
{ number: '31907514691', unix_date: '1547015232' },
{ number: '31907514691', unix_date: '1547016134' },
{ number: '31907514691', unix_date: '1547016443' },
{ number: '31907638716', unix_date: '1547017122' },
{ number: '31907644067', unix_date: '1547017381' }
]
const rs = data.reduce((acc, e) => {
if(!acc.number.has(e.number)) {
acc.newData.push(e)
acc.number.add(e.number)
}
return acc
}, {number: new Set(), newData: []})
console.log(rs.newData)
Вы можете использовать уменьшение, чтобы добиться этого:
var data = [{
number: '31907411282',
unix_date: '1547013214'
},
{
number: '31907411282',
unix_date: '1547012427'
},
{
number: '31907514691',
unix_date: '1547015155'
},
{
number: '31907514691',
unix_date: '1547015232'
},
{
number: '31907514691',
unix_date: '1547016134'
},
{
number: '31907514691',
unix_date: '1547016443'
},
{
number: '31907638716',
unix_date: '1547017122'
},
{
number: '31907644067',
unix_date: '1547017381'
}
];
let filtered = data.reduce((acc, item) => {
if (!acc.some((e, i) => {
if (item.number === e.number) {
if (item.unix_date < e.unix_date) {
acc.splice(i, 1, item);
}
return true;
}
})) {
acc.push(item);
}
return acc;
}, []);
console.log(filtered);
Надеюсь, это поможет,
Сортируйте элементы по дате, уменьшите массив, сохранив только элементы, у которых есть number
, которого еще нет в массиве аккумулятора.
let data = [{
number: '31907411282',
unix_date: '1547013214'
},
{
number: '31907411282',
unix_date: '1547012427'
},
{
number: '31907514691',
unix_date: '1547015155'
},
{
number: '31907514691',
unix_date: '1547015232'
},
{
number: '31907514691',
unix_date: '1547016134'
},
{
number: '31907514691',
unix_date: '1547016443'
},
{
number: '31907638716',
unix_date: '1547017122'
},
{
number: '31907644067',
unix_date: '1547017381'
}
];
let filtered = data
.sort((a, b) => (a.unix_date > b.unix_date) ? 1 : -1)
.reduce((acc, item) => {
if (!acc.find(el => el.number === item.number)) {
acc.push(item)
}
return acc
}, []);
console.log(filtered);